如何在一个自定义tableView单元格中使用两个按钮?我想在单击一个按钮时更改它们的图标
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在一个自定义tableView单元格中使用两个按钮?我想在单击一个按钮时更改它们的图标相关的知识,希望对你有一定的参考价值。
这是按钮动作的方法
@objc func recived()
{
kind = false
self.viewDidLoad()
self.viewWillAppear(true)
}
@objc func paid()
{
kind = true
self.viewDidLoad()
self.viewWillAppear(true)
}
这里有tableView indexPath方法
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView .dequeueReusableCell(withIdentifier: "kindCell", for: indexPath) as! KindTableViewCell
if kind == true {
cell.recivedButton.addTarget(self, action:#selector (recived), for: UIControlEvents.touchUpInside)
cell.recivedButton.setImage(#imageLiteral(resourceName: "green on"), for: UIControlState.normal)
cell.paidButton.setImage(#imageLiteral(resourceName: "red off"), for: UIControlState.normal)
}
else{
cell.paidButton.addTarget(self, action: #selector (paid), for: UIControlEvents.touchUpInside)
cell.paidButton.setImage(#imageLiteral(resourceName: "red on"), for: UIControlState.normal)
cell.recivedButton.setImage(#imageLiteral(resourceName: "green off"), for: UIControlState.normal)
}
return cell
}
你应该在单元格中处理这个逻辑。在Interface Builder中挂钩您的插座和操作,然后......
class KindTableViewCell: UITableViewCell {
@IBOutlet private weak var receivedButton: UIButton!
@IBOutlet private weak var paidButton: UIButton!
@IBAction func received(_ sender: UIButton) {
recivedButton.setImage(#imageLiteral(resourceName: "green on"), for: .normal)
paidButton.setImage(#imageLiteral(resourceName: "red off"), for: .normal)
}
@IBAction func paid(_ sender: UIButton) {
paidButton.setImage(#imageLiteral(resourceName: "red on"), for: .normal)
recivedButton.setImage(#imageLiteral(resourceName: "green off"), for: .normal)
}
}
注意按钮出口是如何private
- 这消除了在视图控制器中更新它们的诱惑。让单元格更新自己的状态。
如果您需要在视图控制器中执行其他工作,请向表视图单元格添加委托协议...
protocol KindTableViewCellDelegate: class {
func kindTableViewCellDidTapReceive(_ kindTableViewCell: KindTableViewCell)
func kindTableViewCellDidTapPaid(_ kindTableViewCell: KindTableViewCell)
}
class KindTableViewCell: UITableViewCell {
// Outlets
var delegate: KindTableViewCellDelegate?
@IBAction func received(_ sender: UIButton) {
// Update button state
delegate?.kindTableViewCellDidTapReceive(self)
}
@IBAction func paid(_ sender: UIButton) {
// Update button state
delegate?.kindTableViewCellDidTapPaid(self)
}
}
然后在你的表视图控制器...
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView .dequeueReusableCell(withIdentifier: "kindCell", for: indexPath) as! KindTableViewCell
cell.delegate = self
return cell
}
您可以根据状态在按钮上添加多个图像:
1:正常状态
cell.recivedButton.setImage(#imageLiteral(resourceName: "green off"), for: UIControlState.normal)
1:对于选定状态
cell.recivedButton.setImage(#imageLiteral(resourceName: "green on"), for: UIControlState.selected)
现在,您可以处理按钮状态,按钮根据按钮状态自动选择图像,您必须将此添加到自定义类,如下所示:
override func awakeFromNib() {
super.awakeFromNib()
cell.recivedButton.setImage(#imageLiteral(resourceName: "green off"), for: UIControlState.normal)
cell.recivedButton.setImage(#imageLiteral(resourceName: "green on"), for: UIControlState.selected)
cell.paidButton.setImage(#imageLiteral(resourceName: "red off"), for: UIControlState.normal)
cell.paidButton.setImage(#imageLiteral(resourceName: "red on"), for: UIControlState.selected)
}
现在,您需要在按钮目标方法中处理这样的按钮选择状态:
sender.isSelected = !sender.isSelected
或者可以检查点击paidButton
的条件然后付费按钮isSlected
为真且recivedButton
isSelected
为假示例:
@objc func recived(_ sender: UIButton)
{
sender.isSelected = !sender.isSelected
paidButton.isSelected = sender.isSelected
}
@objc func paid(_ sender: UIButton)
{
sender.isSelected = !sender.isSelected
recivedButton.isSelected = sender.isSelected
}
以上是关于如何在一个自定义tableView单元格中使用两个按钮?我想在单击一个按钮时更改它们的图标的主要内容,如果未能解决你的问题,请参考以下文章
iOS:如何从 tableview 的自定义单元格中的 UITextField 访问值
如何在 swift 3 中的 tableview 单元格中添加带有自定义视图的 collectionView?
多个tableView单元格中的多个collectionView
如何在自定义滑动(而不是滑动删除)单元格(滑动到邮件/短信)中点击一个单元格时删除在其他 TableView 单元格中添加的子视图