Как программно добавить действие к кнопке в xcode


105

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

Ответы:


222

Попробуй это:

Swift 4

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

Цель-C

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

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

-

Вам нужно будет обратить внимание на то, нужно ли добавлять двоеточие после myActionin action:@selector(myAction)

Вот ссылка .


Что, если я хочу передать параметр селектору при нажатии моей кнопки (например, у меня есть кнопка внутри UITableViewCell, и я хочу передать объект в этой ячейке при нажатии кнопки ячейки)?
acecapades

1
@acecapades Я думаю, вы смешиваете две вещи. Вы не можете прикрепить параметр, как вы могли бы сделать с performSelector. Шаблон действия, используемый UIButton-потомком UIControl, состоит в том, чтобы уведомить некоторую цель с помощью определенного селектора, когда запускается controlEvent. Когда это происходит в вашем случае, вы можете перейти к супервизорам, чтобы увидеть, кто инкапсулирует вашу кнопку, и попросить метод разрешить отношение tablecell к модели, а затем сделать с этим все, что вы хотите.
Ник Уивер,

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аргумент, он заменяется на :в строке выбора.
Etan

Недавно у меня это сработало для Swift 3. button.addTarget (self, action: #selector (ViewController.click), for: 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 02

9

попробуй это:

сначала напишите это в свой .h файл viewcontroller

UIButton *btn;

Теперь запишите это в свой .m файл контроллера просмотра 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];

напишите этот внешний метод viewDidLoad в .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 07

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]; // добавить TargetSub для кнопки [self. btnNotification];} - (void) btnClicked {// Здесь вы можете написать функциональность}
user2677311 08

- (void) btnClicked {// здесь все, что вы хотите, вы можете установить действие для кнопки // Пример: перейти к следующему контроллеру просмотра nextviewController * nextPage = [nextviewController alloc] init]; [self.navigationController pushviewcontroller: анимация следующей страницы: ДА]; }
user2677311 08

2

UIButtonнаследуется от UIControl. В нем есть все методы для добавления / удаления действий: Ссылка на класс UIControl . Посмотрите раздел «Подготовка и отправка сообщений о действиях», в котором описаны – 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.