Получите текст кнопки от IBAction - iPhone

Как уже упоминалось во многих ответах, их не следует рассматривать как адреса памяти. Ознакомьтесь с этими ответами и здесь , чтобы понять их. Обращаясь к вашему последнему утверждению

* p1 и * p2 имеют свойство p2 = p1 + 1 или p1 = p2 + 1, если и только если они находятся рядом в физической памяти

верно только в том случае, если p1 и p2 относятся к одному типу или указывают на типы одинакового размера.

30
задан Organiccat 20 May 2009 в 16:20
поделиться

3 ответа

На самом деле:

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

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

25
ответ дан 27 November 2019 в 23:00
поделиться

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

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

    NSString *title = [(UIButton *)sender currentTitle];
}
60
ответ дан 27 November 2019 в 23:00
поделиться

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

2
ответ дан 27 November 2019 в 23:00
поделиться