2012-11-21 74 views
0

我的大部分tableView都有一個恆定的錶行高度。該桌子高度可以改變,但只能在設計時間。我不想編碼該錶行高度兩次。如何創建一個計數符合某個協議的對象的類別?

所以我做這樣的事情:

@interface UIViewController (cellHeightofFirstRowForTable) <UITableViewDataSource> 


@end 

#import "UIViewController+cellHeightofFirstRowForTable.h" 

@implementation UIViewController (cellHeightofFirstRowForTable) 
-(CGFloat) cellHeightForTable: (UITableView *) tableView 
{ 
    cellHeight= [self tableView:tableView heightForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]; 
} 
@end 

基本上在第一時間表格高度要求,我想計算一次,將其存儲在一個靜態變量,然後簡單地使用該值。

我得到這個編譯錯誤:

No visible @interface for 'UIViewController' declares the selector 'tableView:heightForRowAtIndexPath:' 

但喜,我已經在這是一個的UIViewController協議符合UITableViewDataSource委託界面中指定。

那有什麼用?

我應該只是複製代碼?

注意:現在我已經知道設計是愚蠢的。這個問題留待將來使用。

回答

1

無論有多明智的本能可能會告訴你,tableView:heightForRowAtIndexPath:UITableViewDelegate的一部分,而不是UITableViewDataSource。它也被標記爲@optional,所以即使您確實聲明瞭執行該協議的UIViewController類別,也不會確保該方法得到實施。

+0

鑑於當時我們總是將UITableViewDelegate和UITableViewDataSource委託設置爲同一個對象,我想知道爲什麼蘋果會將它們分開?哦,好吧...... –

+0

因爲委託是處理交互的東西,而數據源就是這樣。它們可以是並且有時是獨立的對象 - 將其視爲控制器與模型。 –

相關問題