UITableViewCell UIButton选择[重复]

Posted

技术标签:

【中文标题】UITableViewCell UIButton选择[重复]【英文标题】:UITableViewCell UIButton Selection [duplicate] 【发布时间】:2016-12-15 17:41:14 【问题描述】:

如果有人可以帮助实现以下要求,那就太好了。 在 tableviewcell 中,我有水平滚动视图,它将动态添加 uibuttons。用户可以从一行中选择多个按钮,但不能从不同行中选择按钮。例如,如果我已经在 row1 中选择了按钮(我应该能够选择一个或多个按钮),并且当我点击 row2 中的按钮时,应该取消选择 row1 中的选定按钮,并且应该选择我在 row2 中点击的按钮.

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


  cell.timeslotScrollView.contentSize = CGSizeMake(500, 0);
  cell.timeslotScrollView.scrollEnabled = YES;
  cell.timeslotScrollView.showsHorizontalScrollIndicator = NO;

  UIButton *button = [[UIButton alloc]init];
  button.frame = CGRectMake(0, 0, 68, 35);
  [button setTitle:@"abc" forState:UIControlStateNormal];

  button.layer.borderWidth = 2;
  button.layer.borderColor = [UIColor colorWithRed:0.23 green:0.71 blue:0.29 alpha:1.0].CGColor;
  button.layer.cornerRadius = 3;
  button.userInteractionEnabled = YES;
   [button setTitleColor:[UIColor colorWithRed:0.23 green:0.71 blue:0.29 alpha:1.0] forState:UIControlStateNormal];
  [button setTag:indexPath.row];
  [button addTarget:self action:@selector(didTap:) forControlEvents:UIControlEventTouchUpInside];

  UIButton *button1 = [[UIButton alloc]init];
  button1.frame = CGRectMake(button.frame.origin.x+68+buttonSpace, 0, 68, 35);
  [button1 setTitle:@"5 pm"  forState:UIControlStateNormal];
  [button1 setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];
  button1.layer.borderWidth = 2;
  button1.layer.borderColor = [UIColor grayColor].CGColor;
  button1.layer.cornerRadius = 3;
  button1.userInteractionEnabled = YES;
  [button1 setTag:indexPath.row];


  [button1 addTarget:self action:@selector(didTap:) forControlEvents:UIControlEventTouchUpInside];

  [cell.timeslotScrollView addSubview:button];
  [cell.timeslotScrollView addSubview:button1];

  

  return cell;


-(void)didTap:(id)sender

  UIButton *pressedButton = (UIButton *)sender;
  if (pressedButton.tag != selectedButton ) 
    [sender setBackgroundColor:[UIColor greenColor]];

    selectedButton = pressedButton.tag;


  
  else
    [sender setBackgroundColor:[UIColor clearColor]];

  

【问题讨论】:

你有代码吗?如果是这样,请发布它。如果没有,请尝试解决您的问题,如果仍然无法解决,请返回。谢谢 @CalebKleveter 我已经更新了我的问题以及我尝试过的代码 你有什么问题? 如果我已经在 row1 中选择了按钮(我应该能够选择一个或多个按钮),并且当我点击 row2 中的按钮时,应该取消选择 row1 中的选定按钮并且我点击的按钮在 row2 应该被选中。 其实另一个问题是这个问题的重复。 【参考方案1】:

我会尝试不同的方法。我会将 UITableViewCell 子类化并在单元实现文件中添加按钮。然后我会在这个单元格中添加一个方法来触发按钮的选择/取消以及您需要执行的任何其他操作。

此时,在 cellForRowAtIndexPath 委托中,您唯一需要关心的是调用单元格中的方法来执行选择取消选择。

【讨论】:

即使你继承了 uitableviewcell ,你也必须单独编写按钮操作方法,我相信所有的选择/取消选择都会发生在这个方法中。所以无论你是否子类化都没有太大区别。【参考方案2】:

我会这样做:

- (void) tableView: (UITableView *) tableView didDeselectRowAtIndexPath: (NSIndexPath *)indexPath 
     [[tableView cellForRowAtIndexPath: indexPath] deselectAllButtons];

现在每次取消选择一行时,它的所有按钮都将被取消选择,无论其他任何行发生什么。您仍然需要编写自己的 deselectAllButtons 方法,例如通过遍历timeslotScrollView 的所有子视图。

【讨论】:

以上是关于UITableViewCell UIButton选择[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在uitableViewCell中保存UIButton的状态?

UIButton状态在用多个部分滚动tableview时改变 - Swift

Swift3:UITableViewCell 和 UIButton - 通过单击 UIButton 显示和隐藏 UITableViewCell

想要在单击相同的 UIButton 时从 UITableViewCell 更改正确的 UIButton 图像

UITableViewCell 中未按下 UIButton

确定 UITableViewCell 中的 UIButton