доступ к UIButton отправителем (id) - PullRequest
5 голосов
/ 06 ноября 2010

У меня есть следующий код

-(IBAction)ATapped:(id)sender{
//want some way to hide the button which is tapped
self.hidden = YES;
}

Который связан с несколькими кнопками. Я хочу скрыть кнопку, которая вызвала этот IBAction. self.hidden, очевидно, не кнопка.

Как скрыть нажатую кнопку? Отправитель.

Спасибо

Ответы [ 5 ]

12 голосов
/ 06 ноября 2010

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

-(IBAction)ATapped:(id)sender{
   // Possible Cast
   UIButton* myButton = (UIButton*)sender;
   myButton.hidden = YES;
}

Или вы можете отправить любое сообщение (вызвать любой метод) на объекте, предполагая, что вы знаете тип (который вы делаете, это кнопка), без необходимости приведения (ответ Владимира).

-(IBAction)ATapped:(id)sender{
   //want some way to hide the button which is tapped
   [sender setHidden:YES];
}
8 голосов
/ 06 ноября 2010

Отправить setHidden сообщение отправителю:

-(IBAction)ATapped:(id)sender{
   //want some way to hide the button which is tapped
   [sender setHidden:YES];
}
2 голосов
/ 06 ноября 2010

Если вы хотите использовать пуленепробиваемое вещание / обмен сообщениями, попробуйте это:

-(IBAction)ATapped:(id)sender{
   // Secure Cast of sender to UIButton
   if ([sender isKindOfClass:[UIButton class]]) {
       UIButton* myButton = (UIButton*)sender;
       myButton.hidden = YES;
   }
}
2 голосов
/ 06 ноября 2010

Вы получаете объект кнопки (id), предоставленный в качестве параметра

-(IBAction)ATapped:(id)sender{
   // Possible Cast
   UIButton* myButton = (UIButton*)sender;
   myButton.hidden = YES;
}
0 голосов
/ 18 декабря 2010

И ... если вы хотите изменить цвет фона кнопки, правильный код будет выглядеть следующим образом?

[sender setBackgroundColor:(NSColor *)redColor];

например?... потому что это не работает для моего ...

...