2015-02-18 2 views
0

Внутри моей ViewController, у меня есть два IBOutlets signUpButton и memberButton, и оба кнопок связаны с тем же signUpOrMemberButtonPressed() IBAction FUNC. Я пытаюсь установить свойство highlighted на эти 2 кнопки, поэтому я могу сделать последующую работу соответственно в моей функциональной команде IBAction submitPressed(). Но я заметил странное поведение между signUpOrMemberButtonPressed() и submitPressed() IBActions. После нажатия на signUpButton или memberButton, кнопка была подсвечена внутри моего signUpOrMemberButtonPressed(), но к моменту ее выполнения submitPressed() отладка показала, что она не подсвечена. Вот мой signUpOrMemberButtonPressed():Не может вручную установить выделенное состояние UIButton в методе IBAction

@IBAction func signUpOrMemberButtonPressed(sender: AnyObject) { 
    var button = sender as UIButton 
    button.highlighted = true 
    if signUpButton.highlighted { 
     memberButton.highlighted = false 
    } else { 
     signUpButton.highlighted = false 
    } 

    if (signUpButton.highlighted) { 
     println("signUpButton is highlighted inside 1st button") 
    } else if (memberButton.highlighted) { 
     println("memberButton is highlighted inside 1st button") 
    } else { 
     println("nothing is highlighted inside 1st button") 
    } 
} 

submitPressed Моя функция:

@IBAction func submitPressed(sender: AnyObject) { 
    if (signUpButton.highlighted) { println("signUpButton is highlighted inside 2st button") } 
    else if (memberButton.highlighted) { println("memberButton is highlighted inside 2st button") } 
    else { println("nothing is highlighted inside 2nd button") 
} 

При запуске мое приложение, я постучал по memberButton, а затем постучал кнопку отправки. Здесь выведен журнал:

memberButton is highlighted inside 1st button 
nothing is highlighted inside 2nd button 

Ничего не было установлено для запуска между этими двумя вызовами func.

ответ

1

Что здесь происходит, так это то, что кнопка «не выделяется» сама (после того, как вы вручную установили значение = true).

Из documentation в highlighted собственности:

UIControl автоматически устанавливает и удаляет это состояние автоматически, когда прикосновение входит и выходит во время отслеживания и когда есть подкрасить.

Вы можете установить выделенное состояние вручную, но вам нужно будет сделать это после того, как UIButton отключит выделенное состояние. Вам нужно будет сделать это в следующем цикле выполнения, который вы можете сделать, используя dispatch_async.

должно работать:

var button = sender as UIButton 
dispatch_async(dispatch_get_main_queue()) { 
    self.memberButton.highlighted = button == self.memberButton 
    self.signUpButton.highlighted = button == self.signUpButton 
} 
+0

Хорошо знать автоматическое отключенное поведение этого 'highlighted' свойства, после пользовательского крана. Я думаю, автоматическое отключение происходит после 'mysignUpOrMemberButtonPressed()'? Я не понимаю, как именно 'dispatch_async (dispatch_get_main_queue()) работает ... Как код знает, когда он пытается установить свойство' highlight' снова в главной очереди, это свойство 'highlight' уже было автоматически отключено? Также почему код не отменяет это же свойство автоматически 2-го раза в блоке 'dispatch_async'? – toadead

+1

Вызов 'dispatch_async' в основном вызывает запуск кода внутри вызова' dispatch_async' после завершения всего остального. Если вы поместите контрольную точку внутри вызова 'dispatch_async' и один сразу после нее, вы увидите, что точка останова, которая приходит после этого, попадает первым, а затем тот, который находится внутри вызова' dispatch_async', получает удар после этого. – Jawwad

+0

Посмотрите, будет ли свойство 'selected' кнопки (вместо' highlight') работать для вас. Это свойство, которое на самом деле должно использоваться, если вы хотите показать, что кнопка находится в выбранном состоянии, и вы не столкнетесь с этой проблемой. Он будет выглядеть несколько иначе визуально, поэтому попробуйте. – Jawwad

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