我有一個@IBOutlet
,它連接到UIButton
。在我的代碼中,我有以下方法,只要用戶執行某個操作就會執行。我已經設法用一些虛擬函數替換我的代碼,以向你們展示我的問題。UIButton#titleLabel在以編程方式更改後恢復
要複製這個問題,我使用的UITableViewController的子類,你可以在下面看到它:
class MyTableViewController : UITableViewController {
@IBOutlet nextOrCreateButton: UIButton!
var dummy = [1, 2]
var index: Int = 0
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return dummy.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
return tableView.dequeueReusableCellWithIdentifier("TemplateCell") as UITableViewCell!
}
@IBAction func onNextClicked() {
if dummy.count == (index + 1) {
dummy.append(0)
}
index++
}
func updateUI() {
if dummy.count == (index + 1) {
print("Setting text to FOO")
nextOrCreateButton.titleView?.text = "FOO"
if dummy.count == 4 {
print("Setting text to FOOBAR")
nextOrCreateButton.titleView?.text = "FOOBAR"
nextOrCreateButton.enabled = false
}
} else {
print("Setting text to BAR")
nextOrCreateButton.titleView?.text = "BAR"
}
}
}
上面的代碼已經被點擊一個按鈕,單擊時它要麼移到下一個虛擬值,在本例中虛擬值不用於任何事情,除了顯示更改文本不起作用。
會發生什麼事是代碼執行它應該如何(根據調試消息),但按鈕的文本更改爲設置,並幾乎立即改回。
單擊該按鈕X次打印以下日誌:
Setting text to BAR
Setting text to FOO
Setting text to FOO
Setting text to FOO
Setting text to FOOBAR
然而,按鈕總是很快變回FOO,即使切換到「FOOBAR」之後,因爲它說,它的確,按鈕不甚至在我們設置代碼時仍然保持禁用狀態。
謝謝你,你能解釋爲什麼會發生這種情況嗎? – Hobbyist
'UIButton'只是管理不同狀態的'titleView'(UIControlStates),忽略你設置爲textView.text的任何東西。人們可以假設設置textView.text將覆蓋所有狀態的文本 - 但它只是沒有,這沒關係,只是要記住 – MarkHim
謝謝,接受。 – Hobbyist