在 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 那么上述问题的解决方案是什么? 通过使用reloadCellsAtIndexPaths
或reloadData
要求表视图重新加载受影响的单元格来隐式调用它以上是关于在 UITableViewCell 中,如何更改单击的按钮粗体的样式,而其他单元格保持静止?的主要内容,如果未能解决你的问题,请参考以下文章
如何在点击时更改 UITableViewCell 的部分位置
如何在 Swift 中以编程方式更改自定义 UITableViewCell 中按钮的背景颜色?
如何更改最后一个 UITableViewCell 的特定约束?
在 UITableViewCell 中,如何更改单击的按钮粗体的样式,而其他单元格保持静止?