Быстрое кодирование NSTimer

Использование Swift 2.0 и попытка реализовать Swift NSTimer в пользовательской клавиатуре. Button2 отлично отображается при нажатии Button1, пока не сработает NSTimer и не сломает клавиатуру.

Я пытаюсь скрыть Button2 через несколько секунд.

@IBAction func Button1(sender: UIButton) {
    Button2.setTitle("Text", forState: UIControlState.Normal)

    NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("Hide:"), userInfo: nil, repeats: false)
    Button2.hidden = false
}

person Cate    schedule 29.07.2015    source источник
comment
Можем ли мы также увидеть, как выглядит Hide()? Может там что-то идет не так.   -  person Cole    schedule 29.07.2015
comment
Покажите свое определение функции Hide:.   -  person zrzka    schedule 29.07.2015
comment
@Cole func Hide () {Button2.hidden = true }   -  person Cate    schedule 29.07.2015
comment
добавьте @objc перед func Hide().... + ваша функция должна принимать один указанный вами аргумент   -  person Andrew Luca    schedule 29.07.2015
comment
Это дает мне сообщение об ошибке «Только классы, протоколы, методы, инициализаторы, свойства и объявления индексов могут быть объявлены @objc.   -  person Cate    schedule 29.07.2015
comment
Проверьте еще раз, func — это метод внутри класса. Это должно сработать, у меня перед глазами такая декларация, которая работает.   -  person Andrew Luca    schedule 29.07.2015
comment
Все равно не повезло. Если это имеет значение, я использую XCode Beta 7 (Swift 2.0), но я не думаю, что это должно быть.   -  person Cate    schedule 29.07.2015
comment
@Caitlin Похоже, вы хотите, чтобы кнопка появлялась и исчезала через 1 секунду. По крайней мере, я верю, что ваша логика работает именно так. Возможно проблема в последовательности выполнения. Попробуйте переместить Button2.hidden = false в строку перед объявлением NSTimer.   -  person Cole    schedule 29.07.2015
comment
@ Caitlin Также, если Hide() не принимает никаких параметров, измените "Hide:" на "Hide"   -  person Cole    schedule 29.07.2015


Ответы (2)


Это должно работать (обратите внимание, что я изменил имена некоторых функций, чтобы они более точно соответствовали соглашениям):

@IBAction func button1Tapped() {
    button2.setTitle("Text", forState: .Normal)
    button2.hidden = false
    NSTimer.scheduledTimerWithTimeInterval(2, target: self, selector: "hideButton2", userInfo: nil, repeats: false)
}

@objc func hideButton2() {
    button2.hidden = true
}
person Eric    schedule 29.07.2015
comment
@Caitlin Я также рекомендовал это, и вы сказали, что это не работает ( - person Andrew Luca; 29.07.2015

Замените Selector("Hide:") на "Hide:" и добавьте @objc перед вашей функцией.

person Andrew Luca    schedule 29.07.2015
comment
Это не имело бы какой-либо разницы. - person Martin R; 29.07.2015
comment
В Swift "foo:" работает так же, как Selector("foo:"). - person Cole; 29.07.2015