2011-09-16 32 views
0

我想要的UITableView的子類,繪製自定義欄目標題。我嘗試如下:子類的UITableView

#import <UIKit/UIKit.h> 
@interface MyTableView : UITableView 
@end 
@implementation MyTableView 
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
{ 
    //my drawing code goes here 
} 
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 
{ 
    //returns the height 
} 
@end 

但是,當我使用這個類時,它會繪製正常的標題。我究竟做錯了什麼?

當我直接設置這些功能集成到一個控制器(沒有子),它工作正常。

更新: 我已經有很多類使用UITableView,我想要它的子類,因爲它可能會更快地改變編寫所需類的類。我如何通過改變課程來改變標題,這有可能嗎?

回答

2

這是發生這種方法是不是從UITableView,他們從UITableViewDelegate

它的工作原理控制器上,因爲無論你設置你的UITableView指向您的控制器,或者你使用的是UITableViewController,它具有的tableview委託自動設置delegate屬性。 (其實,在你的情況下,使用UITableViewController更糟,因爲它已經實現了UITableView而不是你的自定義類)。

編輯:不幸的是,由於UITableView類用來改變其節頭意見delegation pattern,它不是直接實現這樣的動作

做的是提供這些「助手」方法的一種方式你的類,然後在你的每個控制器上實現委託,以便在委託方法被觸發時正確地調用這些方法。

如果這種做法是可以接受的,你甚至應該考慮使用類別使用這些方法,而不是繼承你UITableView,這會使得代碼更清潔。

很明顯,您可以將UITableView委託設置爲您的自定義類,然後爲您仍然想要觸發控件的調用創建另一委託,如cellForRowAtIndexPath,然後在tableview立即調用此新委託方法火災的方法,但是這是迄今爲止最糟糕的可能的解決方案

+0

那麼,我該如何解決我的問題?看到我的更新 – Daniel

+0

@dkk我剛剛更新了我的答案與一些可能的解決方案 –

1

爲什麼要實現TableView我不明白,不MyTableView

@implementation MyTableView 

UPDATE:

選擇是否正確設置該表的dataSourcedelegate性能。

UPDATE2:

您應該UITableViewController子類:因爲你繼承了UITableView

@interface MyTableView : UITableViewController 
@end 
+0

我改正了.. – Daniel

+0

而且它仍然不工作?檢查屬性'dataSource'和'委託' – Nekto

+0

我只是把它寫錯了,所以..仍然不工作:( – Daniel

0

你可以子類的UITableViewController,處理viewForHeaderInSection和heightForHeaderInSection,然後用MyTableViewController爲您希望您的自定義頁眉的每個表視圖的基類。然而,viewForHeaderInSection將需要創建UILabel所需的信息,或者您將要用來顯示標題的任何信息,因此您需要在子類中提供一些一致的代碼,這些代碼將提供該代碼 - 就像填充了NSArray您希望用於標題的字符串,或者可以從viewForHeaderInSection調用的方法。

相關問題