iOS:didSelectRowAtIndexPath未被调用

时间:2014-01-08 14:26:38

标签: ios objective-c uitableview ios7

我在UITableView中有两个viewController。两者都有不同的标签。带有标记0的UITableview是可编辑的,而标记1是不可编辑的。我的问题是UITableview中的标记为1的选择行,其未被调用。但是,当我轻扫didSelectRowAtIndexPath时,会调用标签1。

这是我的代码,

    - (BOOL) tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
    {
            if (tableView.tag == 0) {
                return YES;
            }
            else if (tableView.tag == 1)
            {
                return NO;
            }
        return NO;
    }


- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (tableView.tag == 0)
    {
    if (editingStyle == UITableViewCellEditingStyleDelete)
       {
           //My stuff
       }
    }
    else editingStyle = UITableViewCellEditingStyleNone;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (tableView.tag == 1)
    {
        switch (indexPath.row)
        {
            case 0:
                [self.navigationController popToRootViewControllerAnimated:YES];
                break;
            case 1:
                [self performSegueWithIdentifier:@"mapPageSegue" sender:nil];
                break;
            case 2:
                [self closeMenuTable];
                [self  listenMusic];
                break;
            default:
                break;
        }
    }
}

1 个答案:

答案 0 :(得分:2)

根据您的评论,我猜您没有设置UITableViewDelegate,因为tableView:didSelectRowAtIndexPath:是该协议的一种方法。

无论如何,我会设置一个断点并进行调试。这是深入研究问题的正确方法。

此外,我不依赖于tag,而是依赖于两个表的引用(通过IB出口,属性或ivars)。例如。

if(tableView == self.myFirstTable) {
    // do stuff here
} else {
    // do other stuff here
}