【问题标题】:iPhone table view - some button/action questionsiPhone 表格视图 - 一些按钮/操作问题
【发布时间】:2009-11-10 19:16:55
【问题描述】:

我创建了一个用自定义 UITableViewCell (like this) 填充的表格视图。每个单元格包含两个 UIButton。我将操作分配给按钮,如下所示:

 [decreaseButton addTarget:self action:@selector(decrease) forControlEvents:UIControlEventTouchUpInside];

这是正确的方法吗? 无论如何,它有效,但在我的“减少”方法中,我需要知道在我的 18 个表格视图行中的哪一行中按下了按钮。 indexPath.row 当然不能在 cellForRowAtIndexPath 方法之外工作。 有人可以解释一下怎么做吗?

提前非常感谢!

亚辛

【问题讨论】:

    标签: iphone uibutton action variable-assignment tableview


    【解决方案1】:

    您可以通过两种方式做到这一点。

    检查事件发送者

    改变你的减少方法:

    - (void)decrease;
    

    到:

    - (void)decrease:(id)sender;
    

    这样,当调用减少时,您将获得对内部事件进行修饰的按钮的引用。

    定义更接近信息的减少方法

    另一种解决方案是为每个按钮设置不同的目标实例(例如,将 reduce 函数实现为自定义单元格的一部分)。这样您就知道被触摸的按钮是当前单元格的按钮。

    【讨论】:

    • 这个引用是什么类型的引用/什么数据类型?我只是尝试使用 NSLog 将其打印到控制台,但这使我的应用程序在单击按钮后立即关闭。一般来说,我的问题如下:如何在我的方法中使用它? ;-)
    • sender 参数是发生事件的按钮的实例。所以你必须以某种方式查找哪个单元格有那个按钮。有点烦人,需要额外的状态信息。我会将 reduce 函数移至 Cell 类。这样您就不必确定任何事情,您已经在正确的位置并且知道按下了哪个按钮。
    • “将减少函数移动到 Cell 类”是什么意思?
    • //更新:刚刚使用 -(void)decrease:(id)sender 然后访问标签。非常感谢!
    【解决方案2】:

    我解决这个问题的方法是在我的自定义单元格对象中跟踪我可能需要的数据。并且按钮不是连接到外部接收器,而是连接到它自己的单元,而单元又知道如何调用动作的真正接收器。

    我用类似的东西制作我的细胞:

    cell = [[MyTableViewCell alloc] initWithStyle:style 
                                  reuseIdentifier:CellIdentifier];
    

    我有一个设置方法,所以我可以在出列时重新初始化一个单元格:

    [cell setupMyCellWithContext:objectID 
                          target:[[UIApplication sharedApplication] delegate] 
                          action:@selector(someAction)];
    

    所以在你的单元类中,你使用在 setup 方法中发送的动作和目标来调用真正的目标:

    - (void)doAction:(id)sender {
        if ([target respondsToSelector:action]) {
            [target performSelector:action withObject:objectID afterDelay:0];
        }
    }
    

    因此,当您的用户点击按钮时,操作系统会调用 [cell doAction:],它会使用正确的上下文对象调用您之前设置的目标和操作选择器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-05
      • 2023-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-30
      • 1970-01-01
      相关资源
      最近更新 更多