2016-01-22 3 views
3

У меня есть @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», как он говорит, что делает, кнопка не даже остаются отключенными по мере ввода кода.

ответ

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

Смежные вопросы