2016-01-22 58 views
3

我有一個@IBOutlet,它連接到UIButton。在我的代碼中,我有以下方法,只要用戶執行某個操作就會執行。我已經設法用一些虛擬函數替換我的代碼,以向你們展示我的問題。UIButton#t​​itleLabel在以編程方式更改後恢復

要複製這個問題,我使用的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」之後,因爲它說,它的確,按鈕不甚至在我們設置代碼時仍然保持禁用狀態。

回答

5

不要這樣對UIButton

nextOrCreateButton.titleView?.text = "FOOBAR" 

始終使用

nextOrCreateButton.setTitle("FOOBAR", forState: UIControlState.Normal) 

或者swift3

nextOrCreateButton.setTitle("FOOBAR", for: .normal) 
+0

謝謝你,你能解釋爲什麼會發生這種情況嗎? – Hobbyist

+1

'UIButton'只是管理不同狀態的'titleView'(UIControlStates),忽略你設置爲textView.text的任何東西。人們可以假設設置textView.text將覆蓋所有狀態的文本 - 但它只是沒有,這沒關係,只是要記住 – MarkHim

+0

謝謝,接受。 – Hobbyist

相關問題