Як додати дію до кнопки програмно в xcode


105

Я знаю, як додати IBAction до кнопки шляхом перетягування з конструктора інтерфейсів, але я хочу додати дії програмно, щоб заощадити час і уникати постійного переключення туди-назад. Рішення, ймовірно, дуже просте, але я просто не можу знайти відповіді, коли шукаю його. Дякую!

Відповіді:


222

Спробуйте це:

Швидкий 4

myButton.addTarget(self,
                   action: #selector(myAction),
                   for: .touchUpInside)

Ціль-С

[myButton addTarget:self 
             action:@selector(myAction) 
   forControlEvents:UIControlEventTouchUpInside];

Ви можете знайти багате джерело інформації в Документації Apple. Перегляньте документацію UIButton, це виявить, що UIButton є нащадком UIControl, який реалізує метод додавання цілей .

-

Вам потрібно буде звернути увагу на те, додавати двокрапку чи ні після myActionв action:@selector(myAction)

Ось довідка .


Що робити, якщо я хочу передати параметр селектору при натисканні кнопки (наприклад, у мене є кнопка всередині UITableViewCell, і я хочу передати об'єкт у цій комірці при натисканні кнопки комірки)?
ацекапади

1
@acecapades Я думаю, що ви змішуєте дві речі. Ви не можете приєднати параметр, як це можна зробити з PerformSelector. Схема дії, що використовується нащадком UIButon UIControl, полягає в повідомленні деякої цілі певним селектором, коли спрацьовує controlEvent. Коли це трапляється у вашому випадку, ви можете підняти огляди, щоб побачити, хто інкапсулює вашу кнопку, і попросити метод вирішити таблицю для модельного відношення, а потім зробити все, що ви хочете з цим.
Нік Вівер

1
Я бачу. Що має сенс. Я думаю, я розумію, що ти кажеш. Дякую за пораду Ніку!
acecapades

хтось може це швидко перекласти?

23

Швидка відповідь:

myButton.addTarget(self, action: "click:", for: .touchUpInside)

func click(sender: UIButton) {
    print("click")
}

Документація: https://developer.apple.com/documentation/uikit/uicontrol/1618259-addtarget


Що означає ":" після "натискання" у виклику на UIControl.addTarget?
dumbledad

1
Селектори мають :як заповнювачі аргументів функції. Оскільки clickбере senderаргумент, він замінюється :на рядок вибору.
Ітан

Це нещодавно для мене працювало для Swift 3. button.addTarget (самодіяльність, дія: #selector (ViewController.click), для: UIControlEvents.touchUpInside) func click () {print ("click")} Дякую @Glauco Neves, що вказав нам вниз по правому шляху
uplearnedu.com

14
CGRect buttonFrame = CGRectMake( 10, 80, 100, 30 );
        UIButton *button = [[UIButton alloc] initWithFrame: buttonFrame];
        [button setTitle: @"My Button" forState: UIControlStateNormal];
        [button addTarget:self action:@selector(btnSelected:) forControlEvents:UIControlEventTouchUpInside];
        [button setTitleColor: [UIColor redColor] forState: UIControlStateNormal];
[view addSubview:button];

чи можна додати 2 чи більше дій?
ErasmoOliveira

9

спробуйте це:

спочатку напишіть це у свій .h файл viewcontroller

UIButton *btn;

Тепер запишіть це у свій .m файл viewcontrollers viewDidLoad.

btn=[[UIButton alloc]initWithFrame:CGRectMake(50, 20, 30, 30)];
[btn setBackgroundColor:[UIColor orangeColor]];
//adding action programatically
[btn addTarget:self action:@selector(btnClicked:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn];

запишіть цей метод зовнішнього переглядуDidLoad у .m-файл вашого контролера перегляду

- (IBAction)btnClicked:(id)sender
{
   //Write a code you want to execute on buttons click event
}

8
 CGRect buttonFrame = CGRectMake( x-pos, y-pos, width, height );   //
 CGRectMake(10,5,10,10) 

 UIButton *button = [[UIButton alloc] initWithFrame: buttonFrame];

 button setTitle: @"My Button" forState: UIControlStateNormal];

 [button addTarget:self action:@selector(btnClicked:) 
 forControlEvents:UIControlEventTouchUpInside];

 [button setTitleColor: [UIColor BlueVolor] forState:
 UIControlStateNormal];

 [view addSubview:button];




 -(void)btnClicked {
    // your code }

6

Для Swift 3

Спершу створіть функцію для дії кнопки, а потім додайте її до цільової кнопки

func buttonAction(sender: UIButton!) {
    print("Button tapped")
}

button.addTarget(self, action: #selector(buttonAction),for: .touchUpInside)

3
UIButton *btnNotification=[UIButton buttonWithType:UIButtonTypeCustom];
btnNotification.frame=CGRectMake(130,80,120,40);
btnNotification.backgroundColor=[UIColor greenColor];
[btnNotification setTitle:@"create Notification" forState:UIControlStateNormal];
[btnNotification addTarget:self action:@selector(btnClicked) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btnNotification];


}

-(void)btnClicked
{
    // Here You can write functionality 

}

будь ласка, надайте кілька коментарів, що пояснюють, як може допомогти ваш зразок.
Nogard

UIButton * btnNotification = [кнопка UIButtonWithType: UIButtonTypeCustom]; btnNotification.frame = CGRectMake (130,80,120,40); // Налаштування кадру кнопок btnNotification.backgroundColor = [UIColor greenColor]; [btnNotification setTitle: @ "create Notification" forState: UIControlStateNormal]; // Встановити заголовок кнопки [btnNotification addTarget: self action: @selector (btnClicked) forControlEvents: UIControlEventTouchUpInside]; btnNotification];} - (недійсне) btnКлікнутий {// Тут ви можете написати функціонал}
user2677311

- (void) btnClicked {// тут що завгодно, ви можете встановити дію для кнопки // Приклад: перейти до наступного контролеру viewviewController * nextPage = [nextviewController alloc] init]; [self.navigationController pushviewcontroller: nextPage анімований: ТАК]; }
user2677311

2

UIButtonуспадковує від UIControl. У ньому є всі способи додавання / видалення дій: UIControl Class Reference . Перегляньте розділ «Підготовка та надсилання повідомлень про дії», який охоплює – sendAction:to:forEvent:та – addTarget:action:forControlEvents:.


1
 UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self 
       action:@selector(aMethod1:)
forControlEvents:UIControlEventTouchUpInside];
[button setTitle:@"Show View" forState:UIControlStateNormal];
button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0);
[view addSubview:button];   
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.