UITableViewCell UIButton选择

时间:2016-12-15 17:41:15

标签: ios objective-c uitableview uibutton xcode8

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

-(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]];

  }
}

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我会做这样的事情:

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

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