建立一个独立的代表?

时间:2010-05-07 15:45:48

标签: iphone objective-c cocoa-touch

  

它对于dataSource和   委托成为同一个对象,它   这个对象也很常见   的viewController。

在我看过的所有信息/教程中,在线代表的设置总是如上所述。如果我想创建自己的类,那么任何人都可以给我任何关于如何做到这一点的指示。该对象在何处实例化,如何连接dataSource和委托项等。我正在使用UITableView来测试它。

2 个答案:

答案 0 :(得分:0)

这个问题确实有两个答案:

1)如果所有教程都采用一种方式,为什么要另外呢?

2)UITableView委托只是符合UITableViewDelegate协议的任何对象。你会像这样创建它。 。

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

假设MyTableViewDelegate实现了UITableViewDelegate协议。

答案 1 :(得分:0)

您应该只需要将UITableView的dataSource和delegate属性设置为要执行这些角色的对象。确保您的新类在其头文件中实现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