0

我有一个UITableViewController会递归调用自己 n 次:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.section == 0) {
        // call different controller
    }
    else if (indexPath.section == 1) {
        GroupTableViewController *tableView = [[GroupTableViewController alloc] initWithStyle:UITableViewStyleGrouped];
        tableView.delegate = self;

        [self.navigationController pushViewController:tableView animated:TRUE];
    }
}

我需要将新GroupTableViewController的委托设置为当前的GroupTableViewController

如果我尝试在代码中设置委托,我会收到警告:

Assigning to `id<GroupTableViewDelegate>' from incompatiable type `GroupTableViewController *const_strong`

所以我的第一个想法是包含GroupTableViewDelegate协议:

@interface GroupTableViewController : UITableViewController <RegionTableViewDelegate, GroupTableViewDelegate>

但这会导致警告:

Cannot find protocal definition for `GroupTableViewDelegate`

但如果我尝试

#import "GroupTableViewController.h"

那会引起问题。

我怎样才能做到这一点?

4

1 回答 1

1

您的代码有点混乱-

        - (void)tableView:(UITableView *)tableView 
  didSelectRowAtIndexPath:(NSIndexPath *)indexPath

tableView是一个指向UITableView实例的指针

GroupTableViewController *tableView = 
  [[GroupTableViewController alloc] initWithStyle:UITableViewStyleGrouped];

tableView是一个指向 GroupTableViewController 实例的指针

为了清楚起见,您应该重命名它:

GroupTableViewController *gtViewController = 
  [[GroupTableViewController alloc] initWithStyle:UITableViewStyleGrouped];

那么你的错误应该变得明显。

这:

    tableView.delegate = self;

改名是这样的:

   gtViewController.delegate = self;

当你真正想要的是:

   gtViewController.tableView.delegate = self;

无需弄乱额外的协议和委托声明......

于 2013-05-13T21:56:09.393 回答