Получить текст кнопки от IBAction - iPhone - PullRequest
30 голосов
/ 20 мая 2009

Когда вызывается IBAction:

-(IBAction) onClick1: (id) sender;

Что передается в отправителя? Поскольку он подключен через IB, я не совсем уверен. Мой вопрос заключается в том, как сделать так, чтобы текст кнопки был переданным объектом (скорее всего NSString), чтобы я мог вызывать его внутри реализации действия.

-(IBAction) onClick1: (id) sender {
  NSLog(@"User clicked %@", sender);
  // Do something here with the variable 'sender'
}

Ответы [ 7 ]

60 голосов
/ 20 мая 2009

sender должен быть элементом управления, который инициировал действие. Однако вы не должны предполагать его тип и вместо этого должны оставлять его определяемым как id Вместо этого проверьте класс объекта в фактическом методе следующим образом:

- (IBAction)onClick1:(id)sender {
    // Make sure it's a UIButton
    if (![sender isKindOfClass:[UIButton class]])
        return;

    NSString *title = [(UIButton *)sender currentTitle];
}
25 голосов
/ 20 мая 2009

Это на самом деле:

-(IBAction) onClick1: (id) sender {
  NSLog(@"User clicked %@", sender);
  // Do something here with the variable 'sender'
}

sender это не NSString, это тип id. Это просто элемент управления, который отправил событие. Таким образом, если ваш метод вызван нажатием кнопки, объект UIButton, который был нажат, будет отправлен. Вы можете получить доступ ко всем стандартным UIButton методам и свойствам программным способом.

14 голосов
/ 07 февраля 2011
-(IBAction)onClick:(id) sender {
     UIButton *btn = (UIButton *)sender;

    //now btn is the same object. And to get title directly
    NSLog(@"Clicked button: %@",[[btn titleLabel] text]);
}
10 голосов
/ 18 октября 2012

Просто напишите следующий код

-(IBAction) getButtonTitle:(id)sender
{
     UIButton *button = (UIButton *)sender; 
     NSString *buttonTitle = button.currentTitle;
     NSLog(@"Button Title %@",buttonTitle);

}

Вот так ... ты сделал !!!

2 голосов
/ 27 ноября 2010

Вы можете просто использовать следующее, чтобы получить метку кнопки и определить, какая из них была нажата:

NSLog(@"Clicked button: %@",[[sender titleLabel] text]);

Чтобы ответить на ваш вопрос, id - это объект от IB.

2 голосов
/ 20 мая 2009

Отправитель должен быть определен как идентификатор типа, а не int или NSString. Отправитель - это фактический объект, вызывающий метод; если вы подключили его к кнопке, это будет UIButton, если это текстовое поле, UITextField. Вы можете использовать это для получения информации от элемента управления (например, текущего строкового значения текстового поля) или для сравнения с переменной экземпляра IBOutlet, если у вас есть несколько элементов управления, подключенных к одному и тому же методу действия.

1 голос
/ 02 апреля 2014

Чтобы получить текст с кнопки:

 NSLog(@"Date::%@",[btn titleForState:UIControlStateNormal]);          
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...