按下UITableViewCell时调用方法

时间:2014-08-17 18:28:41

标签: ios objective-c uitableview

我想在选择/点按UITableViewCell时调用方法。我可以使用静态表格视图轻松完成,但它需要UITableViewController,这对我来说不合适,因此我使用普通的vc。

我有10个这样的指定方法:

- (void) methodOne {
 NSLog(@"Do something");
}   
- (void) methodTwo {
 NSLog(@"Do something");
}

....

我想在点击第一个单元格时调用methodOne,在点击第二个单元格时调用methodTwo等等。

作为第一步,我将numberOfRowsInSection设置为返回10个单元格,但不知道如何将所选单元格与方法连接起来。有没有快速的方法呢?创建10个自定义单元格并为自定义单元格手动设置每个方法将是一个肮脏的解决方案,并且没有免费的位置。

2 个答案:

答案 0 :(得分:2)

您可以在表格视图中轻触任何单元格时使用此方法

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSInteger selectedRow = indexPath.row; //this is the number row that was selected
    switch (selectedRow)
    {
        case 0:
             [self methodOne];
             break;
        default:
             break;
    }
}

使用selectedRow标识选择了哪个行号。如果选择了第一行,则selectedRow将为0

不要忘记将表视图的委托设置为视图控制器。视图控制器还必须符合UITableViewDelegate协议。

@interface YourViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>

只要表视图具有数据源和委托,它与哪种视图控制器无关。所有UITableViewController实际上都是UIViewController,它已经有一个表视图,并且是该表视图的委托和数据源。

答案 1 :(得分:2)

您可以使用方法名称创建一个NSString数组,其顺序应从相应的UITableViewCell中调用。

NSArray *selStringsArr = @[@"firstMethod", @"secondMethod", @"thirdMethod];

然后在字符串数组中的selector中创建tableView:didSelectRowAtIndexPath:,并使用performSelector:调用它。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *selString = selStringsArr[indexPath.row];
    SEL selector = NSSelectorFromString(selString);

    if ([self respondsToSelector:@selector(selector)]) {
        [self performSelector:@selector(selector)];
    }
}

当然,使用performSelector:可能会有read here的一些限制。