【发布时间】: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!