如何在iPhone中单击UIButton时保持选定状态?

Pug*_*gal 3 iphone uitableview

我创建了三个按钮,并为正常状态和选定状态设置背景图像.单击按钮时,将一个图像更改为选定状态.但是当滚动表视图时,不保留所选图像(先前选择的单元格),这意味着它是正常状态.

我的代码是,

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    likeBtn = [UIButton buttonWithType:UIButtonTypeCustom];

    UIImage *likeSelectedImage = [UIImage imageNamed:@"like.png"];

    //set image as background for button in the normal state

    [likeBtn setBackgroundImage:likeSelectedImage forState:UIControlStateNormal];

    [likeBtn addTarget:self action:@selector(likeAction:) forControlEvents:UIControlEventTouchUpInside];

   [cell.contentView addSubview:likeBtn];
 }
Run Code Online (Sandbox Code Playgroud)

我的按钮动作是,

 -(void) likeAction : (id) sender
 {
     UIImage *likeSelectedImg = [UIImage imageNamed:@"like-selected.png"];

     UIImage *likeImg = [UIImage imageNamed:@"like.png"];

           if ([sender isSelected]) {
               [sender setImage:likeImg forState:UIControlStateNormal];
               [sender setSelected:NO];
               }else {
               [sender setImage:likeSelectedImg forState:UIControlStateSelected];
               [sender setSelected:YES];
          }

 }
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,当我滚动表视图单元格时,不保留先前选择的图像状态.因为cellForRowAtIndex方法已经反复调用,当我滚动表时.所以它会自动设定"[likeBtn setBackgroundImage:likeSelectedImage forState:UIControlStateNormal];".如何避免这个问题?那么请帮帮我吧?谢谢!

Dol*_*lbz 5

由于UITableView用于显示数据的设计模式,您看到了这一点.为了最大限度地减少资源使用,只保证当前屏幕上的表格单元格保留在内存中.当单元格在屏幕外滚动时,单元格对象将被回收用于新单元格出现在列表的另一端,从而失去其状态.

我假设你已经修改了你的代码,因为你正在返回一个单元格tableView: cellForRowAtIndexPath:但是在你发布的代码片段中没有任何其他地方引用该变量.这使得在添加按钮之前无法看到如何获取单元格.

关于你的代码如何工作的黑暗中的一点点刺激,但这里是你需要做什么来保持状态的高级概述.

  1. 创建一些控制器级存储(如NSArray)以保存所有表行的所有按钮状态.
  2. likeAction确定按钮来自哪一行(可能在创建时将行号分配给按钮的标记属性)并更新NSArray中相应行的状态
  3. tableView: cellForRowAtIndexPath:通过使用从获取的NSArray为给定indexPath状态设置了正确的图像的按钮.