天天看點

如何将UITableViewDelegate和UITableViewDataSource從UITableViewController中分離出來?

      大家都知道如果給UITableViewController裝載一些資料和控制cell的行為(高度,樣式等)都需要指定UITableView的delegate給自身,一般會使用IB或者在viewDidLoad中寫上self.tableView.delegate = self;然後實作UITableViewDelegate和UITableViewDataSource中的方法,例如:– tableView:cellForRowAtIndexPath: 等等.

      那麼如何将實作UITableViewDelegate和UITableViewDataSource的方法脫離出來單獨放在一個新的class中呢?

第一步:建立TableDataDelegate

TableDataDelegate.h

@interface TableDataDelegate : NSObject<UITableViewDelegate,UITableViewDataSource> {

NSArray *_data;//用于cell的資料,你可以選擇自己的方式

}

@property (nonatomic,retain) NSArray *data;

@end 

TableDataDelegate.m

#import "TableDataSource.h"

@implementation TableDataSource

@synthesize data = data;

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

.......

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

.......

}

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

......

}

-(void) dealloc{

[data release];

[super dealloc];

}

@end

該delegate實作了我們需要的方法

myTableController.h

#import "TableDataDelegate.h"

@interface MyTableController : UIViewController {

UITableView *_tableView;

TableDataDelegate *_dataDelegate;

}

@property (nonatomic,retain) IBOutlet UITableView *tableView;

@property (nonatomic,retain) IBOutlet TableDataDelegate *dataDelegate;

@end

在MyTableController中,我定義了TableDataDelegate這個class,這是必須的,因為這裡必須retain它,否則你會運作失敗,接下來還需要将它連接配接到XIB中.

myTableController.m

.....

-(void) viewDidLoad{

//_dataDelegate.data = ...可以在這裡設定你的data,也可以在其他地方,例如viewWillAppear

}

..... 

第二步:在IB中建立連接配接

如何将UITableViewDelegate和UITableViewDataSource從UITableViewController中分離出來?

如上圖所示,從Library中拖出Object到我們的XIB中,将class設定為TableDataDelegate,然後将MyTableController中的dataDelegate連接配接到這裡,這一步很重要,我最開始的失敗就差了這一步.然後對應的dataSource和delegate都連接配接到你的UITableView上.

如何将UITableViewDelegate和UITableViewDataSource從UITableViewController中分離出來?

UITableView的連接配接示例

如何将UITableViewDelegate和UITableViewDataSource從UITableViewController中分離出來?

最後是MyTableController的連接配接示例

繼續閱讀