iOS5动态地为UITableViewCell中的附件按钮分配动作

时间:2011-10-29 02:35:35

标签: iphone uitableview ios5 selector delegation

我在应用程序中有一个表视图,我希望应用程序的多个部分能够用于将更新发布到表视图,并提供用户可以执行的操作。我想到实现这个的方法之一是通过一个大的枚举,带有表视图的switch语句。在这种情况下,表视图将基于表格单元格的枚举值执行操作。这需要了解所涉及的课程,并且看起来过于复杂。

必须有更好的方法。是否可以使用具有UITableViewCell附件按钮目标的选择器?

我认为对于常规按钮和导航栏按钮,我可以这样做:

[thisIconBtn addTarget:self action:@selector(changeIconState:) forControlEvents:UIControlEventTouchUpInside];

是否有等效的方法将操作分配给 UITableView附件?或者我应该坚持使用大枚举?

谢谢你!

1 个答案:

答案 0 :(得分:6)

不幸的是,自{3.0}起,accessoryAction的{​​{1}}已被弃用 来自UITableViewCell Reference Docs

  

UITableViewCell
  定义要调用的操作消息的选择器   当用户点击附件视图时。 (在iOS 3.0中已弃用。请改用   用于处理水龙头的accessoryAction   在细胞上。)

,如果您的附件视图继承自tableView:accessoryButtonTappedForRowWithIndexPath:UIControl等),您可以通过 UIButton设置目标和操作方法。

这样的事情(根据您的需要进行修改):

addTarget:action:forControlEvents:

或者,更传统的路线(我不是肯定的,但我相信你的问题表明这是你要避免的。如果这是真的,你可以忽略这段代码。):

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:kCustomCellID];
    if (!cell) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kCustomCellID] autorelease];
    }

    // Set the accessoryType to None because we are using a custom accessoryView
    cell.accessoryType = UITableViewCellAccessoryNone;

    // Assign a UIButton to the accessoryView cell property
    cell.accessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];

    // Set a target and selector for the accessoryView UIControlEventTouchUpInside
    [(UIButton *)cell.accessoryView addTarget:self action:@selector(someAction:) forControlEvents:UIControlEventTouchUpInside];
    return cell;
}