如何设置tableview委托

dub*_*eat 12 iphone delegates objective-c uitableview ios

我正在尝试使用UITableView不使用笔尖而不使用笔尖UITableViewController.

UITableViewUIViewControllerLike So中添加了一个实例

mytable = [[UITableView alloc] initWithFrame:CGRectMake(22, 207, 270, 233)];
[mytable setDelegate:self];
[self.view mytable];
Run Code Online (Sandbox Code Playgroud)

另外我已经将以下表格视图方法添加到我的UIViewController(为了简洁而剪切)

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

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

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

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
Run Code Online (Sandbox Code Playgroud)

我收到一条警告,说我UIViewController没有实施UITableView委托协议.

什么是告诉表视图其委托方法的正确方法?

(这是我尝试使用a UITableView而不UITableTableview从新文件选项中选择控制器的第一次尝试)

Jac*_*kin 29

您需要符合你的类的UITableViewDelegateUITableViewDataSource协议.(cellForRowAtIndexPath:UITableViewDataSource协议中)

通过在类接口定义中使用尖括号来执行此操作:

@interface myViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> {...}
Run Code Online (Sandbox Code Playgroud)

你现在而不是在使用a之前得到这个警告的原因UITableViewController是因为UITableViewController已经符合这些协议.

所以,实质上a UITableViewController只是一个符合UITableViewDelegateUITableViewDataSource,并且具有UITableView实例成员的类.这就是它.

当然,如果你还没有继承UITableViewController,那么你需要手动设置的dataSourcedelegateUITableView:

[tableView setDelegate:self];
[tableView setDataSource:self];
Run Code Online (Sandbox Code Playgroud)


ma1*_*w28 16

您还必须将dataSource委托设置为self:

[tableView setDelegate:self];
[tableView setDataSource:self];
Run Code Online (Sandbox Code Playgroud)

或者,同样地:

tableview.delegate = self;
tableview.dataSource = self;
Run Code Online (Sandbox Code Playgroud)

  • @RichardGriffiths 差异纯粹是风格上的。两者都是设定者并完成相同的事情。 (2认同)