2

我有一個類MyTextView,它繼承自UITextView。我也有MyViewController這是UIViewController的一個子類。 MyViewController執行UITextViewDelegate協議並設置爲MyTextView的代表。UIScrollViewDelegate方法不與UITextView子類一起工作

MyViewController實現了UITextViewDelegate(如- (void)textViewDidChange:(UITextView *)textView)的一些代理方法,它們都工作正常。但是,當我嘗試實現- (void)scrollViewDidScroll:(UIScrollView *)scrollView或某些或其他滾動委託方法時,它們不會被調用。我的理解是,這應該起作用,因爲UITextView繼承自UIScrollViewUITextViewDelegate符合UIScrollViewDelegate,它聲明瞭所討論的滾動方法。

奇怪的是,如果我進入IB並將文本視圖的類從MyTextView更改爲UITextView,所有委託方法都會被調用,包括滾動塊。

回答

1

這是可能的,你重新合成的delegate財產,這將意味着現在有一個新的實例變量私有類,合成存取指向那個私有變量。因此,通過實例變量而不是屬性引用委託的任何超類實現都不會通過(當然,那些引用該屬性的實例將會調用您的子類訪問器)。看起來也許UITextField使用該屬性,UIScrollView使用該實例!

+0

你是絕對正確的卡爾。出於某種原因,委託人在MyTextView.m中被綜合了起來,這是我從來沒有想到的,因爲我們沒有在這個類中聲明委託。我相信這肯定是另一個班級的複製/粘貼問題。有趣的是,Cocoa類在使用屬性和實例變量時似乎存在不一致。所以有時候你會擺脫它,有時你不會。這給我造成了困惑。 – pajevic

+0

也許UIScrollView不會將它的代理公開給它的超類,所以它們被迫嚴格通過它的屬性來引用它。 –

0

我還沒有試過這個,但它可能與協議有關?

在這種情況下,第三個答案可能會幫助: How to use custom delegates in Objective-C

+0

那麼,我不是在做一個自定義委託,所以這個問題對我來說並不是那麼重要。而且我知道如何使用代表;我已經使用過很多次(我在Cocoa/Cocoa Touch開發方面經驗豐富)。但我沒有遇到過我在我的問題中所描述的行爲。 – pajevic

相關問題