-1

Как вы добавляете отправителя (id) в следующий код?Как добавить (id) отправителя к следующему - (IBAction)?

- (IBAction) gobutton: (UIButton *) button5 { 

Все, что я пробовал, не помогает, любая помощь будет оценена по достоинству. Благодарю.

EDIT: Мне нужно держать (UIButton *) кнопка 5 ссылка в (IBAction)

+0

Почему отрицательный голос? :-( – 0SX

ответ

5

Если Я правильно помню, и если вы используете это так, как я думаю, что вы,

- (IBAction) gobutton: (id) sender { 
if(sender == button5) 
    //do something... 
else 
    //do something else... 
} 

Предполагая, что вы указали button5 в качестве параметра, чтобы указать, что это выполняется в ответ на button5 быть нажат.

2

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

- (IBAction) gobutton: (id)sender; 
+0

Мне нужно и (UIButton *) button5 и (id) отправителя на - (IBAction) – 0SX

+0

действие обычно вызывается передачей идентификатора отправителя, чтобы вы могли запросить отправителя, если кнопка5 подключена к действию gobutton, тогда отправитель id - ваша кнопка5 ... – stefanB

+0

отправитель - это кнопка. –

-3

Можете ли вы создать простую структуру, содержащую как UIButton, так и отправителя, и использовать это?

struct myObject { UIButton * button5; идентификатор отправителя; }

... или, вы можете создать свой собственный NSObject (вероятно, более какао-у):

@instance MyObject: NSObject { ... }

+0

Нет. Целевое/действие имеет очень специфический шаблон: один аргумент, отправитель. – bbum

1

Первый параметр действие равно всегда отправитель (вы можете указать тип и имя в соответствующих случаях).

Если метод является действием для кнопки, то первым параметром будет кнопка. Если этот метод является действием для нескольких кнопок, то первый параметр позволит вам определить, какая кнопка была нажата (как описывает Лепер).

Какая проблема вы действительно пытаетесь решить?
Существуют методы передачи информации методу действия. Например, если у вас есть кнопка, которая появляется в ячейке просмотра таблицы и выполняет одно и то же действие для каждой ячейки, то в методе действий вы захотите определить, какая кнопка ячейки была нажата.

+0

проблема у меня в том, что я пытаюсь использовать следующий код: \t \t [(goGOAppDelegate *) [[UIApplication sharedApplication] делегат] \t \t goFlip: (идентификатор) отправителя]; Тем не менее, я получаю сообщение о том, что «отправитель» незаявлен, и единственная проблема заключается в том, что я не могу сделать отправителя (IBAction) из-за необходимости кнопки (UIButton *)5, чтобы определить эту часть в IBAction: gorev2 = (button5.tag == BUTTON7) – 0SX

+0

Если вы вызываете метод напрямую, то он не должен быть IBAction, и он не должен иметь никаких параметров. Опять же, вам, вероятно, нужно предоставить более подробную информацию о том, что вы пытаетесь сделать - это не похоже на типичный подход. – gerry3

+0

@unknown: Что такое кнопка5? Кто называет этот метод '-gobutton:'? – kennytm

3

Хорошо, сначала .... IBAction на самом деле не означает ничего особенного, кроме Interface Builder. В основном:

#define IBAction void 

Поэтому, когда вы видите IBAction, думаю, "пустота". Единственная причина, по которой он существует, - это флаг, указывающий Interface Builder, что метод является допустимым методом для подключения управляющих действий. Компилятор Objective-C не должен знать об этом, и поэтому он определен как void, поскольку все методы «действия» возвращают void.

Во-вторых, методы действий также имеют один аргумент, который может быть объектом любого числа типов. Из-за этого предполагается, что методы действия должны использовать тип id как тип аргумента. Таким образом, им может передаваться указатель на любой объект Objective-C, не вызывая при этом компилятор генерировать ошибку проверки типа.

Так обычно действия должны работать что-то вроде этого:

- (IBAction)myAction:(id)sender { 
    if (sender == self.someButton) { 
     UIButton *button = (UIButton *)sender; 
     ... 
     return; 
    } else if (sender == self.someControl) { 
     UIControl *control = (UIControl *)sender; 
     ... 
     return; 
    } 
} 

Другими словами, id почти как нетипизированного указатель, как void * обычно используется в C, когда некоторая функция должна принимать указатель на что-то неизвестного типа. sender могут быть разными типами управления, поэтому используется нечто общее, например id, тогда отправитель передается в нечто более конкретное, как только код знает, что это такое.

В любом случае, нет никаких оснований определять что-либо как имеющее тип возврата IBAction, если вы не собираетесь использовать этот метод в качестве целевого действия в Interface Builder. Наличие IBAction в вашем делете приложения кажется необычным ....

0

Как я могу получить идентификатор отправителя до того, как пользователь коснется элемента управления?

Найденный! Установите тег и используйте viewWithTag.

Смежные вопросы