【问题标题】:IBoutlet Collection Button - setTitleIBoutlet 收藏按钮 - setTitle
【发布时间】:2017-10-30 03:08:05
【问题描述】:

我有许多按钮都具有相同的操作,所以我使用了集合视图

@IBOutlet var playerButtons: [UIButton]!

我希望使用选择器视图可以让我选择一个名称,然后设置按钮的标题,但是我似乎不知道如何在集合视图中实现这一点。

我尝试使用 docent 的功能似乎可以工作

open func setTitle(_ title: String?, for state: UIControlState)

我的完整代码是

import UIKit
import Firebase


class TeamSelection: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {

    //IBOutlets Collection for Player Names
    @IBOutlet var playerButtons: [UIButton]!
    @IBOutlet var Player: [UIView]!
    @IBOutlet weak var homeTeamLabel: UILabel!
    @IBOutlet weak var pickerView: UIPickerView!

    var player = [Players]()
    var club: Clubs!
    var clubName = String()
    var playerFirstName = String()
    var playerLastName = String()

    // Will be removed and Firebase used in place
    var players = ["player 1", "player 2", "player 3", "and so on"]

    override func viewDidLoad() {
        super.viewDidLoad()

        pickerView.dataSource = self
        pickerView.delegate = self

        CLUB_KEY = ""
        CLUB_KEY = club.clubKey

        self.navigationItem.title = club.clubName

        DataService.ds.REF_PLAYERS.queryOrdered(byChild: "clubKey").queryEqual(toValue: club.clubKey).observe(.value, with: { (snapshot) in

            print("PLAYERS_COUNT: \(snapshot.childrenCount)")
            print("PLAYERS_SNAPSHOT: \(snapshot)")

            self.player = []
            if let snapshots = snapshot.children.allObjects as? [FIRDataSnapshot] {

                for snap in snapshots {
                    if let playerDict = snap.value as? Dictionary<String, AnyObject> {
                        let key = snap.key

                        let players = Players(playerKey: key, dictionary: playerDict)
                        self.player.append(players)

                    }
                }
            }
//            self.tableView.reloadData()
        }) { (error) in
            print(error.localizedDescription)
            print("CHET: local error")
        }
    }

    func numberOfComponents(in pickerView: UIPickerView) -> Int {

        return 1
    }

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {

        return players.count
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {

        return players[row]
    }

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

//        self.pickerView.isHidden = true

        // Missing command
           playerButtons.setTitle
    }

    //IBActions Collection for Player Names
    @IBAction func playerSelectionAction(_ sender: UIButton) {

        sender.setTitle("buttonName", for: .normal)

        let sender = sender.tag
        print(sender)


    }    
}

【问题讨论】:

  • 点击重复链接:在viewDidLoad中进行更改
  • 我没有可用的 .setTitle
  • 那是不可能的。对于每个 UIButton 实例,该函数都存在。您的问题中已经有sender.setTitle("buttonName", for: .normal),但您必须在viewDidLoad 中这样做。您不应该在playerSelectionAction 函数中执行此操作....因为它会在您单击按钮之后运行。但是您要更改 before viewController 的标题...所以将该行放在您的 viewDidLoad...
  • “[UIButton]”类型的值没有成员“setTitle”,但如果我使用单个插座,而不是集合,它可以正常工作 @IBOutlet weak var singlePlayerButton: UIButton!

标签: ios swift3


【解决方案1】:

按以下排序

@IBAction func playerSelectionAction(_ sender: UIButton) {

        let senderINT = sender.tag

        let selectedBtn = self.view.viewWithTag(senderINT) as! UIButton

        selectedBtn.setTitle("", for: .normal)

        print(sender)

    }

【讨论】:

  • 标签是一种反模式。
  • 反模式,不明白你的意思
  • 使用标签是一种不好的做法。总有比使用标签更好的解决方案。
猜你喜欢
  • 1970-01-01
  • 2019-12-17
  • 1970-01-01
  • 2017-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多