2011-04-11 63 views
0

我有加載表視圖用於每個標籤的標籤視圖困惑過的UITableView numberOfRowsInSection語法

第一個選項卡接口聲明的UITableView *的tableView; 第二個選項卡接口聲明UITableView * favTableView;

申報時的行數第二個表格這部作品:

- (NSInteger)tableView:(UITableView *)favTableView numberOfRowsInSection:(NSInteger)section { 
    return [favList count]; 
} 

但是,如果我將其更改爲:

- (NSInteger)favTableView:(UITableView *)favTableView numberOfRowsInSection:(NSInteger)section { 
    return [favList count]; 
} 

應用程序崩潰時,我嘗試加載第二個選項卡

是我的錯誤(a)不理解哪個是變量/保留字,(b)給每個表一個唯一的標識符,即favTableView,而不是重用tableView。

另外,第二表沒有標題欄

回答

5

您必須實現的委託方法是

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 

在這種方法的原型,tableView:(注意冒號)是你不能改變一個固定的名字。 tableView的第二個實例僅僅是一個局部變量名,在該方法中具有含義。以下內容也是有效的:

-(NSInteger)tableView:(UITableView *)tv numberOfRowsInSection:(NSInteger)section 

委託方法名稱是他們是什麼。你不能決定你想讓委託方法名稱成爲別的東西,或者當UITableView需要從它的委託中獲取信息時,怎樣知道要調用哪些方法?

因此,對於您的表favTableView,如果您將實現上述委託方法的對象指定爲favTableView的委託,那麼在調用本地變量tv時實際上與favTableView相同。

我可以看到你會對此感到困惑。 SDK使用'tableView'做了很多事情:方法原型佔位符名稱,變量名稱以及誰知道還有什麼。它歸結爲能夠閱讀和理解Objective-C方法簽名。 :-)這有點奇怪,直到你習慣它。

+0

馬克 - 謝謝。現在你已經說過語法顏色編碼更有意義,所以命名委託電視而不是tableView(gggrrrr)。因此,基本上重用第一個tableView的代碼爲第二個tableView(唯一不同的是源xml文件),但對於第二個tableView的標題和didSelectRowAtIndexPath視圖不起作用 – JulianB 2011-04-11 21:01:56

0

委託可能使用預先設定的方法名,正如你指出。不應該有不重用tableView的功能問題,因爲無論如何你可能會重用favTableView。標題欄應該通過在自定義tableView中手動設置標題的屬性來解決。如果您正在查找標題,則必須設置高度和大小的屬性。