2

@selector(updateStuff:)

这是自动发送参数:(id)sender。是否可以将其覆盖为其他内容?在我的特定用法中,实际的发件人是没有意义的。

我正在使用 UITableView 并在每个单元格的 UIAccessoryView 插槽中设置 UISwitch。最初,我在单元初始化之外将 UISwitch 添加到 UIAccessoryView,这允许每个 UISwitch 成为唯一的实例。然而,这在 iPhone 3G 上向下滚动长列表时会产生明显的延迟。如果我在初始化时将 UIAccessoryView 添加到单元格,则可以将其出列而不是实例化,并大大缓解滞后。不幸的是,这样做的代价是,实例对于表中的每个 UISwitch 都不是唯一的,并且 :(id)sender 变得毫无意义。

我需要两件事之一...

  1. 一种覆盖与@selector 关联的参数的方法,因此我可以替换 :(id)sender
  2. 或者比我用来跟踪 UISwitches 的策略更好的策略。

在单元格创建/出列后,我总是可以求助于添加 UISwitch ,但它非常缓慢且效率低下。谢谢你的帮助。

此致,Z@K!

4

3 回答 3

4

我有一个类似的问题,我解决它的方法是设置发件人的“标签”属性,每个视图都有这个属性,目的是帮助识别它。因此,在创建/出列单元格时,设置标签以识别单元格,并在操作上使用 [sender tag] 获取点击的上下文

于 2010-09-12T22:42:26.553 回答
1

很多很多方法:

  • 设置标签。
  • 设置一个“关联对象”(参见 objc_setAssociatedObject())
  • 子类 UISwitch。添加一些属性。
  • 子类 UITableViewCell。添加一些属性。向上导航视图层次结构,直到到达表格视图单元格(类似于while (v && ![v isKindOfClass:[UITableViewCell class]]) {v = v.superview; })。
  • 如上所述,向上导航视图层次结构。打电话[tableView indexPathForCell:(UITableViewCell*)v]
  • 如果有多个表视图,您可以继续向上导航,直到您点击 UITableView...
于 2010-09-13T00:58:13.953 回答
0

我已经编写了一个 UISwitch 子类,它带有一个基于块的处理程序,用于值更改控制事件,这可以在尝试跟踪哪个开关的值已更改时提供帮助。理想情况下,我们可以用组合而不是子类化做类似的事情,但这很适合我的需要。

https://gist.github.com/3958325

你可以像这样使用它:

ZUISwitch *mySwitch = [ZUISwitch alloc] init];

[mySwitch onValueChange:^(UISwitch *uiSwitch) {
        if (uiSwitch.on) {
            // do something
        } else {
            // do something else
        }
    }];

您也可以从 XIB 文件中使用它,方法是将开关拖到您的视图上,然后将其类更改为 ZUISwitch

于 2012-10-26T11:53:16.433 回答