在 UITableViewController 中的 UITableViewCells 之间进行通信

Posted

技术标签:

【中文标题】在 UITableViewController 中的 UITableViewCells 之间进行通信【英文标题】:Communicating between UITableViewCells in a UITableViewController 【发布时间】:2011-08-02 18:40:09 【问题描述】:

我知道这是一个常见的问题主题。但是经过广泛搜索后我还没有找到答案,所以我在这里问它。

我有一个 UITableViewController,其中每一行都是 UITableViewCell 子类的一个实例。每个 UITableViewCell 子类都有一个 UIButton。最初,所有 UIButton 都具有相同的图像(只是一个蓝色圆圈)。点击一个按钮只会导致该按钮的图像发生变化(比如一个红色圆圈)。这部分很简单:只需处理 UITableViewCell 子类中的点击并切换图像。

这是具有挑战性的部分:当我点击另一个蓝色按钮时,我希望当前为红色(如果有)的按钮将其图像切换回蓝色。 如何让这个按钮切换它的图像?

我在哪里跟踪当前为红色的按钮?

【问题讨论】:

【参考方案1】:

在你的 UITableViewCell 子类中实现- (void)setSelected:(BOOL)selected animated:(BOOL)animated 方法。选中单元格后,将 UIButton 图像设为红色;否则,将 UIButton 图像设置为蓝色。选择新单元格时调用此方法,因此将始终只有一个红色按钮单元格。

- (void)setSelected:(BOOL)selected animated:(BOOL)animated

    if(selected)
    
        [myButton setImage:RED_IMAGE forState:UIControlStateNormal]; //or however else you want to change your button's image
    else
    
        [myButton setImage:BLUE_IMAGE forState:UIControlStateNormal];
    

    [super setSelected:selected animated:animated];

【讨论】:

试过了,但效果不太好。回想一下,我正在点击每个 UITableViewCell 子类中的按钮(而不是 UITableViewCell 本身)。 对不起,我很困惑,你为什么使用按钮? 没问题 :-) UITableViewCell 子类由于应用程序设计而有一个按钮。因此,点击一个单元格会做一件事,而点击一个单元格中的按钮会做另一件事。 好的,那么你可以实现一个静态类来保存指向当前选定按钮的指针。当一个新按钮被按下时,告诉旧按钮(静态类持有的那个)改变它的图像。完成后,将静态类中的指针设置为当前选择的新按钮。

以上是关于在 UITableViewController 中的 UITableViewCells 之间进行通信的主要内容,如果未能解决你的问题,请参考以下文章

在导航栏中使用 UITableViewController

在 UINavigationController 中显示 UITableViewController

在 UIPopoverController 中显示 UItableViewController

在 UITableViewController 中没有调用 viewWillAppear?

如何在 UITableViewController 中显示 MSMutableArray 数据?

没有在 UITableViewController 中调用 DidSelectRowAt