【问题标题】:Calling methods when UITableViewCell is pressed按下 UITableViewCell 时调用方法
【发布时间】:2014-10-10 17:13:55
【问题描述】:

我想在选择/点击UITableViewCell 时调用一个方法。我可以使用静态表格视图轻松完成此操作,但它需要 UITableViewController 在这种情况下对我不利,因此我使用的是普通 vc。

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

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

....

我想在点击第一个单元格时调用methodOne,在点击第二个单元格时调用methodTwo,依此类推..

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

【问题讨论】:

  • 无论您是使用UITableViewController 还是将您自己的表视图添加到UIViewController,您都需要实现所有正常的表视图数据源和委托方法。

标签: ios objective-c uitableview


【解决方案1】:

您可以在表格视图上点击任何单元格时使用此方法

- (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,上面已经有一个表视图,并且是该表视图的委托和数据源。

【讨论】:

  • 谢谢克里斯,我真的很喜欢这个解决方案,正是我需要的!
【解决方案2】:

您可以创建一个带有方法名称的NSStrings 数组,按照它们应从其对应的UITableViewCells 调用的顺序。

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

然后从字符串数组的tableView:didSelectRowAtIndexPath: 中创建一个selector 并使用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

【讨论】:

    猜你喜欢
    • 2013-04-01
    • 2012-12-26
    • 2012-10-14
    • 1970-01-01
    • 2011-06-14
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多