2010-05-07 76 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