<small id='6YraN'></small><noframes id='6YraN'>

    1. <i id='6YraN'><tr id='6YraN'><dt id='6YraN'><q id='6YraN'><span id='6YraN'><b id='6YraN'><form id='6YraN'><ins id='6YraN'></ins><ul id='6YraN'></ul><sub id='6YraN'></sub></form><legend id='6YraN'></legend><bdo id='6YraN'><pre id='6YraN'><center id='6YraN'></center></pre></bdo></b><th id='6YraN'></th></span></q></dt></tr></i><div id='6YraN'><tfoot id='6YraN'></tfoot><dl id='6YraN'><fieldset id='6YraN'></fieldset></dl></div>

          <bdo id='6YraN'></bdo><ul id='6YraN'></ul>
      1. <tfoot id='6YraN'></tfoot>
      2. <legend id='6YraN'><style id='6YraN'><dir id='6YraN'><q id='6YraN'></q></dir></style></legend>

        如何更改特定 TableViewCell 中的按钮颜色

        时间:2023-07-06
          <tfoot id='xWQRW'></tfoot>

                <bdo id='xWQRW'></bdo><ul id='xWQRW'></ul>
                  <tbody id='xWQRW'></tbody>

                <small id='xWQRW'></small><noframes id='xWQRW'>

                <i id='xWQRW'><tr id='xWQRW'><dt id='xWQRW'><q id='xWQRW'><span id='xWQRW'><b id='xWQRW'><form id='xWQRW'><ins id='xWQRW'></ins><ul id='xWQRW'></ul><sub id='xWQRW'></sub></form><legend id='xWQRW'></legend><bdo id='xWQRW'><pre id='xWQRW'><center id='xWQRW'></center></pre></bdo></b><th id='xWQRW'></th></span></q></dt></tr></i><div id='xWQRW'><tfoot id='xWQRW'></tfoot><dl id='xWQRW'><fieldset id='xWQRW'></fieldset></dl></div>

                • <legend id='xWQRW'><style id='xWQRW'><dir id='xWQRW'><q id='xWQRW'></q></dir></style></legend>

                • 本文介绍了如何更改特定 TableViewCell 中的按钮颜色的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我有一个类似测验应用的应用.在 tableViewCell 中有 4 个用于任务变体的按钮.当用户按下按钮时,我需要更改颜色,当我尝试在按钮操作中更改颜色时,所有表格视图单元格中的按钮颜色都会发生变化.但我只需要在我按下的地方进行更改.我已经尝试过编写委托,但它给出的结果相同,这是我编写委托的代码:

                  I have an app like a quiz app. In tableViewCell there are 4 buttons for variants of the task. And I need to change color when the user is pressed the button, when I try to just change color in action of button the color of button changes in all table view Cells. But I need to change only in that, where I pressed. I already tried to write delegate, But it is giving the same result this is code how I wrote my delegate:

                  class CustomButton: UIButton {
                  
                  override var isHighlighted: Bool {
                      didSet {
                          if isHighlighted {
                              backgroundColor = UIColor.lightGray
                          } else {
                              backgroundColor = UIColor.init(red: 34/255, green: 89/255, blue: 128/255, alpha: 1.0)
                          }
                      }
                  }
                  

                  }

                  我已经为按钮添加了目标动作.

                  I already have added target actions to buttons.

                  var variant1 = UIButton()
                  var variant2 = UIButton()
                  var variant3 = UIButton()
                  var variant4 = UIButton()
                  
                      func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
                      let cell = tableView.dequeueReusableCell(withIdentifier: "finalCell")!
                      variant1 = cell.contentView.viewWithTag(1) as! UIButton
                      variant2 = cell.contentView.viewWithTag(2) as! UIButton
                      variant3 = cell.contentView.viewWithTag(3) as! UIButton
                      variant4 = cell.contentView.viewWithTag(4) as! UIButton
                  
                  
                      if (numberOfVariants.count != 0) {
                          let questionTextView = cell.contentView.viewWithTag(5) as! UITextView
                          questionTextView.text = "(Questions[indexPath.row].content!)"
                          variant1.addTarget(self, action: #selector(self.variant1ButtonPressed), for: .touchUpInside)
                          variant2.addTarget(self, action: #selector(self.variant2ButtonPressed), for: .touchUpInside)
                          variant3.addTarget(self, action: #selector(self.variant3ButtonPressed), for: .touchUpInside)
                          variant4.addTarget(self, action: #selector(self.variant4ButtonPressed), for: .touchUpInside)
                            }
                          return cell
                      }
                  

                  当用户点击按钮时,我已经确定了表格视图的 indexPath(如果有帮助的话):

                  I already identified the indexPath of table view (if it is helpful), when the user clicked to button:

                      func variant1ButtonPressed(_ sender:AnyObject) {
                      print("Variant1")
                      let buttonPosition:CGPoint = sender.convert(CGPoint.zero, to:self.tableView)
                      let indexPath = self.tableView.indexPathForRow(at: buttonPosition)
                      let intIndexpath = Int((indexPath?.row)!)
                      globalIndexPath = intIndexpath
                  }
                  func variant2ButtonPressed(_ sender:AnyObject) {
                      let buttonPosition:CGPoint = sender.convert(CGPoint.zero, to:self.tableView)
                      let indexPath = self.tableView.indexPathForRow(at: buttonPosition)
                      let intIndexpath = Int((indexPath?.row)!)
                      globalIndexPath = intIndexpath
                  
                  }
                  func variant3ButtonPressed(_ sender:AnyObject) {
                      let buttonPosition:CGPoint = sender.convert(CGPoint.zero, to:self.tableView)
                      let indexPath = self.tableView.indexPathForRow(at: buttonPosition)
                      let intIndexpath = Int((indexPath?.row)!)
                      globalIndexPath = intIndexpath
                  
                  
                  }
                  func variant4ButtonPressed(_ sender:AnyObject) {
                      let buttonPosition:CGPoint = sender.convert(CGPoint.zero, to:self.tableView)
                      let indexPath = self.tableView.indexPathForRow(at: buttonPosition)
                      let intIndexpath = Int((indexPath?.row)!)
                      globalIndexPath = intIndexpath
                  
                  
                  }
                  

                  这是它在故事板中的样子(如果有帮助)

                  This how its looks like in storyboard(If it is helpful)

                  推荐答案

                  我认为你使用的代码比你真正需要的要多得多,所以这是使用 closures 的另一种方法,我在我的故事板中只有一个 viewController 并在里面添加一个 UITableView 和一个名为 ButtonTableViewCell 的 customCell 然后我将一个普通的 UIButton 链接到该单元格作为 @IBOutlet 就是这样,完整的实现在这里

                  I think you are using much more code than you really need to do this task, so this is another approach using closures, I have only one viewController in my storyboard and add a UITableView inside and a customCell called ButtonTableViewCell then I linked a normal UIButton to that cell as @IBOutlet and that is all, the full implementation is here

                  https://github.com/rmelian2014/SOButtonsTableViewCellQuestion

                      import UIKit
                  
                  @IBDesignable
                  class ButtonTableViewCell: UITableViewCell {
                  
                      @IBInspectable var selectedColor : UIColor = UIColor.red
                      @IBInspectable var normalColor : UIColor = UIColor.blue
                  
                      static let cellHeigth : CGFloat = 360
                  
                      @IBOutlet var buttonsArray: [UIButton]!
                      var selectedText : String?{
                          willSet{
                              guard newValue != nil else{
                                  return
                              }
                  
                              var foundedIndex = -1
                              for (index,text) in self.texts.enumerated() {
                                  if(text == newValue!){
                                      foundedIndex = index
                                      break
                                  }
                              }
                  
                              guard foundedIndex != -1 else
                              {
                                  return
                              }
                  
                              self.buttonsArray[foundedIndex].backgroundColor = selectedColor
                          }
                      }
                      var texts : [String] = []
                  
                      var buttonActionClosure : ((_ selectedText:String?)->Void)?
                  
                      func setupWithClosure(texts:[String],textSelected:String?,closure:((_ selectedText:String?)->Void)?)
                      {
                          self.texts = texts
                  
                          for (index,button) in self.buttonsArray.enumerated(){
                              if(self.texts.count > index)
                              {
                                  button.setTitle(self.texts[index], for: .normal)
                              }
                              button.tag = index
                              button.backgroundColor = self.normalColor
                          }
                  
                  
                          self.selectedText = textSelected
                          if(closure != nil)
                          {
                              self.buttonActionClosure = closure
                          }
                  
                  
                      }
                  
                      override func awakeFromNib() {
                          super.awakeFromNib()
                          // Initialization code
                      }
                  
                      override func setSelected(_ selected: Bool, animated: Bool) {
                          super.setSelected(selected, animated: animated)
                  
                          // Configure the view for the selected state
                      }
                  
                      @IBAction func buttonAction(sender:UIButton)
                      {
                          if(self.texts.count > sender.tag){
                              let newSelectedText = self.texts[sender.tag]
                  
                              if(newSelectedText != self.selectedText){
                                  self.selectedText = newSelectedText
                              }else
                              {
                                  self.selectedText = nil
                              }
                          }
                          if(self.buttonActionClosure != nil)
                          {
                              self.buttonActionClosure!(self.selectedText)
                          }
                      }
                  
                      override func prepareForReuse() {
                          super.prepareForReuse()
                          self.buttonActionClosure = nil
                      }
                  
                  }
                  

                  视图控制器

                  import UIKit
                  
                  class ViewController: UIViewController {
                  
                      @IBOutlet weak var tableView: UITableView!
                  
                      var dictOfSelectedsCells : [Int:String?] = [:]
                  
                      override func viewDidLoad() {
                          super.viewDidLoad()
                          // Do any additional setup after loading the view, typically from a nib.
                          tableView.delegate = self
                          tableView.dataSource = self
                      }
                  
                      override func didReceiveMemoryWarning() {
                          super.didReceiveMemoryWarning()
                          // Dispose of any resources that can be recreated.
                      }
                  
                  
                  }
                  
                  extension ViewController : UITableViewDelegate,UITableViewDataSource
                  {
                      func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
                          return 4
                      }
                  
                      func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
                          return ButtonTableViewCell.cellHeigth
                      }
                  
                      func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
                  
                          if let cell = tableView.dequeueReusableCell(withIdentifier: "ButtonTableViewCell", for: indexPath) as? ButtonTableViewCell
                          {
                              cell.selectionStyle = .none
                              var selectedText : String?
                              if let currentSelectedText = self.dictOfSelectedsCells[indexPath.row]
                              {
                                  selectedText = currentSelectedText
                              }
                  
                              cell.setupWithClosure(texts:["Variant1","Variant2","Variant3","Variant4"], textSelected: selectedText, closure: { [weak self] (selected) in
                                  debugPrint(indexPath)
                                  self?.dictOfSelectedsCells[indexPath.row] = selected
                                  tableView.reloadRows(at: [indexPath], with: .none)
                              })
                  
                              return cell
                          }
                          assert(false, "this must not happen")
                      }
                  }
                  

                  希望对你有帮助

                  这篇关于如何更改特定 TableViewCell 中的按钮颜色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:从一个类调用 IBOutlet UIButton 到另一个 Viewcontroller 下一篇:如何设置 UIButton 图像,该图像是带边框的圆形

                  相关文章

                • <tfoot id='l8qqa'></tfoot>
                      <bdo id='l8qqa'></bdo><ul id='l8qqa'></ul>
                    1. <i id='l8qqa'><tr id='l8qqa'><dt id='l8qqa'><q id='l8qqa'><span id='l8qqa'><b id='l8qqa'><form id='l8qqa'><ins id='l8qqa'></ins><ul id='l8qqa'></ul><sub id='l8qqa'></sub></form><legend id='l8qqa'></legend><bdo id='l8qqa'><pre id='l8qqa'><center id='l8qqa'></center></pre></bdo></b><th id='l8qqa'></th></span></q></dt></tr></i><div id='l8qqa'><tfoot id='l8qqa'></tfoot><dl id='l8qqa'><fieldset id='l8qqa'></fieldset></dl></div>

                      <legend id='l8qqa'><style id='l8qqa'><dir id='l8qqa'><q id='l8qqa'></q></dir></style></legend>

                      <small id='l8qqa'></small><noframes id='l8qqa'>