如何在Objective-c中更改自定义UITableViewCell中的UIButon文本属性

时间:2017-05-25 20:38:59

标签: ios objective-c uitableview

我看过很多关于这个主题的帖子,但我找不到一个适合解决我的确切情况的帖子。我有一个UITableView,它包含一个带有UIButton和UITextfield的Custom UITableViewCell。我可以使用UITableView Delegate中的以下代码按下按钮:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   static NSString *simpleTableIdentifier = @"ConversationCell";

    ConversationCell *cell = (ConversationCell *)[tableView   dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    if (cell == nil)
    {
       NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ConversationCell" owner:self options:nil];
       cell = [nib objectAtIndex:0];
    }

    [cell.participantBtn addTarget:self action:@selector(editClickedParticipant:) forControlEvents:UIControlEventTouchUpInside];

   return cell;
}

然后添加以下方法来处理点击

- (void) editClickedParticipant:(id) sender
{
    ...
}

在editClickedParticipant中,我显示了一个带有选项列表的UIPickerView。一旦选择了选择器的索引,如何在触发editClickedParticipant操作的单元格中更改按钮的文本属性?有没有办法使用标签或什么?

3 个答案:

答案 0 :(得分:0)

您可以使用以下方式获取按钮:

UIButton *senderButton = (UIButton *)sender;

并在senderButton中应用更改。

或者, 如果你需要这个细胞,

- (void) editClickedParticipant:(id) sender {
   CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:buttonPosition];
//You can get the cell and other components inside the cell using indexPath
}

答案 1 :(得分:0)

可以使用tag属性轻松完成:

cell.participantBtn.tag = indexPath.row; // This goes in cellForRowAIndexPath method

- (void) editClickedParticipant:(id) sender {

   NSInteger row = sender.tag; //Anything can be done with the button
   NSIndexPath *indexPath = [NSIndexPath indexPathForItem: row inSection:0];

   //Change your button's text attribute here below
   [sender setTitle:@"Your new title" forState:UIControlStateNormal];
}

答案 2 :(得分:0)

尝试在tableView:willDisplayCell:forRowAtIndexPath:

的视图控制器生命周期方法中应用按钮文本中的更改

这是视图控制器生命周期中调整单元格视图的适当位置/时间 - 就在显示之前。

- (void)tableView:(UITableView *)tableView 
  willDisplayCell:(UITableViewCell *)cell 
forRowAtIndexPath:(NSIndexPath *)indexPath {

    'for example...

    cell.participantBtn.label = "new label";
}

来自Apple documentation ...

  

此方法为委托提供了覆盖基于状态的机会   表视图前面设置的属性,例如selection和   背景颜色。委托返回后,表视图仅设置   alpha和frame属性,然后仅在将行设置为动画时   他们滑入或滑出。