仅更改所选按钮的背景,并将其他按钮的背景保持为按钮的初始状态

时间:2017-12-20 10:05:44

标签: ios objective-c select button

我有一个集合视图。在集合视图中,有8个单元格。每个单元格都有一个按钮。单击一个按钮我必须在其底部添加一个视图,并将其文本cor从白色更改为黑色。实现这一点,我已经完成了以下代码

-(void)doSomething:(UIButton *) sender {

    if(sender.isSelected){
    [sender setTitleColor:[UIColor colorWithRed:36/255.0 green:71/255.0 blue:113/255.0 alpha:1.0] forState:UIControlStateNormal];
    recipeHeading = (RecipeHeadingCell*)[[sender superview] superview];
    NSIndexPath *path = [_headingCollectionView indexPathForCell:recipeHeading];
    UIView *bottomBorder = [[UIView alloc] initWithFrame:CGRectMake(0, sender.frame.size.height + 2.0f, sender.frame.size.width, 30)];
    bottomBorder.backgroundColor = [UIColor whiteColor];
    [sender addSubview:bottomBorder];
    [_outerCollectionView scrollToItemAtIndexPath:path atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:YES];
        sender.selected=false;
    }
    else{
        NSLog(@"not selected");
        sender.selected=true;
 }    
}

但还有一个场景要解决,即当您在单元格1中选择一个按钮时,其余的(甚至是之前选择的那个)应该自动进入不可选状态,即它们应该具有白色标题颜色并且应该有在他们的底部没有看法。 我的代码适用于选择的东西,但它不会改变其他未选择的按钮的状态。请在这个方向给我一些指导。任何帮助或建议将不胜感激。谢谢提前!

2 个答案:

答案 0 :(得分:0)

它需要为每个具有选择状态的true或false值的单元格添加模型(布尔数组并在 cellForRowAtIndexpath 中访问它),并且当单击一个单元格时刷新整个表格重绘

@interface ViewController ()

{

   NSMutableArray*allValues;

}

在viewDidLoad

  allValues = [NSMutableArray new];

  for(int i = 0 ;i<YourTableViewArrayCount;i++)
  {
     [allValues addObject:[NSNumber numberWithBool:NO]];
  }

和tableview dataSource

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

  bool d = [allValues[indexPath.row] boolValue];

  if(d)
  {
      // cell selected
  }
  else
  {
        // cell not selected
  }

  /// implement remaining here

 }

注意:在UITableViewCell自定义类中单击一个单元格并使用 NotificationCenter <重新加载 tableView 时,将此数组设为全局并更改其值/ strong>或任何观察员

答案 1 :(得分:0)

创建集合视图时,将按钮标记提供为单元格的indexPath.item。 单击按钮时,将按钮标记保存在全局值中(让我们将其称为 selectedRow ,并将值初始设置为-1)并重新加载集合视图。 如果 selectedRow 和indexPath.item相同,则在索引处的项目的单元格中显示边框并查看其他内容。

希望这有帮助