调用 didSelectRowAtIndexPath 时激活单元格的附属视图 (UISwitch)

Posted

技术标签:

【中文标题】调用 didSelectRowAtIndexPath 时激活单元格的附属视图 (UISwitch)【英文标题】:Activate cell's accessory view (UISwitch) when didSelectRowAtIndexPath is called 【发布时间】:2012-02-20 20:30:50 【问题描述】:

tableView 的每个单元格都有一个 UISwitch 作为附件视图:

UISwitch *mySwitch = [[UISwitch alloc] initWithFrame:CGRectZero];
cell.accessoryView = mySwitch;
[mySwitch addTarget:self action:@selector(SwitchToggle:) forControlEvents:UIControlEventValueChanged];

当用户点击它时切换开关,但我也希望在调用 didSelectRowAtIndexPath 时切换它(当用户点击该单元格时)。

我试过这个(但它不起作用):

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
  
    UISwitch *tempSwitch = (UISwitch *)[tableView cellForRowAtIndexPath:indexPath].accessoryView;
    [tempSwitch addTarget:self action:@selector(SwitchToggle:) forControlEvents:UIControlEventValueChanged];

    [tableView deselectRowAtIndexPath:indexPath animated:YES]; // cell selection fadeout animation

谢谢。

【问题讨论】:

当它“不起作用”时会发生什么?完全没有动作,好像didSelectRowAtIndexPath: 不存在? 【参考方案1】:

代码必须如下所示:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
  
    UISwitch *tempSwitch = (UISwitch *)[tableView cellForRowAtIndexPath:indexPath].accessoryView;
    [tempSwitch setOn:!tempSwitch.on animated:YES];
    [tableView deselectRowAtIndexPath:indexPath animated:YES];

请记住,您还必须更新模型。

【讨论】:

这会切换开关,但不会调用更新我的模型的 (switchToggle:) 操作。我会想办法解决这个问题。谢谢! “解决方法”是添加这一行:[self switchToggle:tempSwitch];

以上是关于调用 didSelectRowAtIndexPath 时激活单元格的附属视图 (UISwitch)的主要内容,如果未能解决你的问题,请参考以下文章

系统调用与函数调用

java三种调用方式(同步调用/回调/异步调用)

LINUX系统调用

引用调用 vs 复制调用调用

RPC 调用和 HTTP 调用的区别

js方法调用