IBOutlet и IBAction в Swift

Я подключил IBOutlet и IBAction к моей переменной кнопки из Interface Builder к моему контроллеру представления. Как добавить метод действия к кнопке в Swift? Этот код не работает.

@IBOutlet var OK: UIButton!
@IBAction func OK(sender: UIButton){}

Я нашел эквивалент Objective-C:

@interface Controller
{
    IBOutlet id textField; // links to TextField UI object
}

- (IBAction)doAction:(id)sender; // e.g. called when button pushed

person linux-user    schedule 14.09.2015    source источник


Ответы (4)


Когда вы прикрепляете кнопку к viewController и создаете действие (IBAction) с помощью ctrl-drag, вы создаете метод, который выглядит так в Swift (если у него нет аргументов):

@IBAction func buttonAction() {}

В Objective-C то же самое будет выглядеть так:

- (IBAction)buttonAction {}

Это означает, что @IBAction func OK(sender: UIButton){} — это метод действия.

Если вы хотите узнать об аргументе отправителя, я бы рекомендовал этот ТАК пост.

Редактировать:

Для того, что вы хотите сделать, я создаю IBOutlet и IBAction, таким образом я могу изменить их атрибуты с помощью выходной переменной и иметь действие с IBAction, как показано выше:

@IBOutlet var OK: UIButton!
@IBAction func OK(sender: UIButton){} 

Например, если я хочу скрыть кнопку, я бы поместил этот код в viewDidLoad

OK.hidden = true

OK в этом коде предназначен для выходной переменной, если бы я хотел напечатать «Вы нажали меня» на консоль при нажатии кнопки, я бы использовал этот код:

@IBAction func OK(sender: UIButton){
  println("You pressed me")
}

Выше я использую действие для вывода на консоль «Вы нажали на меня».

Несколько замечаний:

Когда выйдет Swift 2.0, println изменится на print. Также с вашим действием и выходом я бы предложил дать им разные имена, чтобы их было легче различать, что-то вроде этого:

@IBOutlet var okOutlet: UIButton!
@IBAction func okAction(sender: UIButton){} 

Наряду с этим, вы должны использовать верблюжий регистр при именовании переменных, констант, функций и т. д.

person Caleb Kleveter    schedule 14.09.2015
comment
Упомянутые выше решения работают, если я создаю новую кнопку типа «Действие». Но я создал кнопку типа розетки и хотел добавить к ней действие. Причина, по которой я создал кнопку выхода, заключается в том, что мне нужна переменная для кнопки, чтобы я мог устанавливать свойства для переменной кнопки. Теперь я также хочу добавить к нему действие. - person linux-user; 16.09.2015

Один из способов сделать это — перетащить элемент управления с кнопки на контроллер просмотра и выбрать действие: введите здесь описание изображения

Если вы подключили действие своей кнопки, ваш код должен работать нормально.

person Prontto    schedule 14.09.2015
comment
Подключить одну и ту же кнопку дважды? Один для Outlet и один для Action? - person linux-user; 16.09.2015

Вот шаги, которые вы можете выполнить:

Для @IBOutlet

1. Объявите свойство Element вашего конструктора интерфейсов сразу после имени класса.

class SomeViewController: UIViewController{

    @IBOutlet weak var aTextField : UITextField! ////Your Interface builder Element

2. Закрепите элемент IB из раскадровки.

введите здесь описание изображения

Для @IBAction

1. Напишите метод внутри вашего класса (скажем, SomeViewController)

@IBAction func anAction(_sender : AnyObject){


}

2. Подцепите метод из раскадровки.

введите здесь описание изображения

Надеюсь, это может помочь.

person Tunvir Rahman Tusher    schedule 08.11.2016

Вы можете просто добавить действие из раскадровки. См. изображение. Изображение

person ridvankucuk    schedule 14.09.2015