2010-04-20 101 views
1

我做了一個自定義的UITableView子類,並實現了這一點:當我在UITableView中實現-scrollViewDidScroll:UIScrollViewDelegate時,我必須調用super嗎?

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    // scrolled... 
} 

現在,我想是的UITableView也喜歡得到這個消息對於一些顯而易見的原因。但是,當我不把它轉發給超級用戶時,出於某種原因,一切仍然正常。我必須讓那個人超級?我的意思是......這是一個委託方法實現,但據我所知,這仍然會覆蓋在UITableView中實現的任何東西,或者不是?

編輯:我明白了......代表可以是任何人。沒關係這個。但是:我在超類中有這樣的事情,並且創建一個子類。我怎麼會知道超類實現了這個方法,我必須把它轉發給超類?

回答

2

這是一個委託方法,它意味着它被您的UITableView實例調用,以方便您使用。

滾動發生,UITableView內部代碼會調用。

if ([delegate respondsTo:@selector(scrollViewDidScroll:)]) { 
    [delegate performSelector:@selector(scrollViewDidScroll:) withObject:[self scrollView]]; 
} 

因此您使用此方法來實現附加功能,例如在tableView滾動一定數量時激活控件。

希望這會有所幫助!

5

簡答:沒有。
這些方法在UIScrollViewDelegate協議中定義。
它們是爲了在委託中實現的,委託可能只有NSObject作爲父項。

它不覆蓋任何東西,因爲它是委託方法。
UIScrollView只是它的東西,並且如果委託被設置,調用委託方法。

+1

這可能會讓某些人感到困惑的一個原因是,您正在使用已經實現此方法的UITableViewController的子類,因此要求您使用override關鍵字作爲函數的前綴。但是,答案仍然正確,因爲在這種情況下不要致電super。 (只是假裝超級不是問題。) – quickthyme 2016-12-19 17:40:54

相關問題