2010-05-07 116 views
0

其共同爲dataSource和 委託爲同一個對象,其 也常見於此對象爲 viewController。建立一個獨立的委託?

在我看到的所有信息/教程中,代表總是按照上述方式設置。如果我想創建自己的班級,那麼任何人都可以給我任何指示,告訴我如何做到這一點。該對象在哪裏被實例化,如何連接數據源和委託物品等。我正在使用UITableView來測試它。

回答

0

有實際上是兩個這個問題的答案:

1)如果所有的輔導做這件事,爲什麼它的另一個?

2)UITableView委託只是符合UITableViewDelegate協議的任何對象。你會像這樣創建它。 。 。

- (void) viewDidLoad { 
    MyDelegate *delegate = [[[MyDelegate alloc] init] autorelease]; 
    self.myTableView.delegate = delegate; 
} 

假設MyTableViewDelegate實現了UITableViewDelegate協議。

0

您應該只需要將UITableView的dataSource和委託屬性設置爲要執行這些角色的對象。確保你的新類實現的UITableViewDelegate和UITableViewDataSource協議在其頭文件:

@interface MyTableDelegate : NSObject <UITableViewDelegate, UITableViewDataSource> 

你在哪裏分配這個對象是依賴於你的應用程序架構。對象可以包含在一個NIB文件,也可能在你分配表視圖控制器或控制器的viewDidLoad方法的同時,其分配你的表被分配:

// Create the delegate object and retain a reference to it 
MyTableDelegate *tableDelegate = [[MyTableDelegate alloc] init]; 
self.tableDelegate = tableDelegate; 

再比如說,如果你使用導航控制器,你可能會因此像這樣創建表並將其推入堆棧:

// Create the table view controller 
MyTableViewController *viewController = [[MyTableViewController alloc] initWithNibName:@"MyTableView" bundle:nil]; 

// Set the delegate and data source 
viewController.tableView.delegate = tableDelegate; 
viewController.tableView.dataSource = tableDelegate; 

// push the table view controller onto the naviagtion controller stack 
[[self navigationController] pushViewController:viewController animated:YES]; 

// Clean up resources 
[viewController release]; 

的MyTableDelegate類必須至少包含強制的方法:

tableView:cellForRowAtIndexPath 
tableView.numberOfRowsInSection