在 UITableViewCell 中,如何更改单击的按钮粗体的样式,而其他单元格保持静止?

Posted

技术标签:

【中文标题】在 UITableViewCell 中,如何更改单击的按钮粗体的样式,而其他单元格保持静止?【英文标题】:In UITableViewCell, how can I change the style of the clicked button bold, while the other cells remain still? 【发布时间】:2016-07-25 08:55:32 【问题描述】:

UITableViewCell 只包含一个 UIButton。到目前为止,我可以在控制台上打印单击的 UIButton 的“当前标题”。我想做的是更改单击按钮粗体的样式。如果点击了另一个,前一个应该变回常规,新的需要变粗体。

如果它们是 UIViewController 中的多个按钮,我可以通过单独添加这些按钮来轻松完成此操作,但我认为这种情况不会以这种方式完成。

我应该在 UIViewController 类中保存所选按钮的索引,然后重新加载 UITableView 吗?如果是这样,任何人都可以让我知道如何处理这个问题?我有这个想法,但我不知道怎么做。

【问题讨论】:

【参考方案1】:
var selectIndex:NSIndexPath = NSIndexPath(forRow: -1, inSection: 0)

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell

    let cell: UITableViewCell! = tableView.dequeueReusableCellWithIdentifier("cell")! as UITableViewCell
    cell.btn.addTarget(self, action: Selector("ButtonAction:"), forControlEvents: UIControlEvents.TouchUpInside)
    cell.btn.tag = indexPath.row
    cell.btn.titleLabel?.font = UIFont.systemFontOfSize(20)

    if indexPath.row == selectIndex.row
    
        cell.btn.titleLabel?.font = UIFont.boldSystemFontOfSize(20)
    
    return cell


func ButtonAction(sender: UIButton) 

    selectIndex = NSIndexPath(forRow: sender.tag, inSection: 0)
    yourTableView.reloadData()

【讨论】:

【参考方案2】:

试试这个代码

CustomTableViewCell.h

@property (nonatomic, weak) IBOutlet UIButton *button;
@property (nonatomic, copy) void (^ButtonTapAction)(CustomTableViewCell *aCell);

CustomTableViewCell.m

//Method assign to that button
- (IBAction)arrowButtonTapped:(id)sender

    if (self.ButtonTapAction) 
        self.ButtonTapAction(self);
    

cell 用于tableview cellForRowAtIndexpath:

__weak typeof(self) weakSelf = self;
        cell.arrowButtonTapAction = ^(CustomTableViewCell *aCell)
            aCell.button.titleLabel.font=[UIFont boldSystemFontOfSize:20];
        ;

通过使用此代码,您无需重新加载 Cell。

【讨论】:

【参考方案3】:

您可以添加一个属性来存储与当前选定按钮的单元格对应的行。

在您的cellForRowAtIndexPath 中检查是否indexPath.row == selectedRow 并适当地设置按钮外观。

选择更改时,请使用新选择的行和先前选择的行调用reloadCellsAtIndexPaths如果适用。

【讨论】:

【参考方案4】:

您必须在cellForRowAtIndexPath 中进行操作,并保留一个标志,说明它已被选中。

您还必须在cellForRowAtIndexPath上调用tableView.visibleCells for @ 0.选择按钮时,因为cellForRowAtIndexPath仅在单元格进入视图时工作。

【讨论】:

你不应该直接调用表视图数据源方法 @Paulw11 那么上述问题的解决方案是什么? 通过使用reloadCellsAtIndexPathsreloadData 要求表视图重新加载受影响的单元格来隐式调用它

以上是关于在 UITableViewCell 中,如何更改单击的按钮粗体的样式,而其他单元格保持静止?的主要内容,如果未能解决你的问题,请参考以下文章

如何在点击时更改 UITableViewCell 的部分位置

如何在 Swift 中以编程方式更改自定义 UITableViewCell 中按钮的背景颜色?

如何更改最后一个 UITableViewCell 的特定约束?

在 UITableViewCell 中,如何更改单击的按钮粗体的样式,而其他单元格保持静止?

如何在自定义 UITableViewCell 中更改 UIButton 标题的权重属性?

如何在 OBJECTIVE C 的 UITableViewCell 中更改先前按下的 UIButton 标签?