2009-07-06 2 views
4

У меня есть объект UIImageView, который при нажатии на него будет воспроизводить анимацию, я хочу повторно использовать один и тот же код для создания нескольких объектов. Как установить тег отправителя, чтобы он знал его другой объект?идентификатор отправителя uibutton

.h

- (IBAction)startClick:(id)sender; 

.m

- (IBAction)startClick:(id)sender 
{ 
    //UIImageView *theButton = (UIImageView *)sender.tag; 

    bubble.animationImages = [NSArray arrayWithObjects: 
          [UIImage imageNamed: @"Pop_1.png"], 
          [UIImage imageNamed: @"Pop_2.png"], 
          [UIImage imageNamed: @"Pop_3.png"], nil]; 

    [bubble setAnimationRepeatCount:1]; 
    bubble.animationDuration = 1; 
    [bubble startAnimating]; 
} 
+0

возможно дубликат [Casting параметр отправителя] (http://stackoverflow.com/questions/1089752/casting-sender-parameter) – kennytm

ответ

3

Отправитель является объектом, который называется методом startClick. Вы можете передать этот объект в UIImageView, а затем посмотреть свойство тега этого объекта, чтобы определить, какой из них он есть.

Вам необходимо установить свойство тега в другом месте кода. Если у вас есть UIImageViews в Interface Builder, вы можете использовать окно свойств для ввода номера тега. В противном случае, когда вы выделите и запустите свои UIImageViews, установите свойство тега.

+0

+1 для работает как шарм. благодаря! –

17

Использование [sender tag].

Почему не sender.tag, спросите вы?

Вы можете использовать только точечную нотацию, если вы нанесли sender в качестве примера UIView, как в ((UIView *)sender).tag. Объекты UIView имеют свойство тега. Если вы не внесете sender в качестве примера UIView, это всего лишь id, который соответствует протоколу NSURLAuthenticationChallengeSender, и ему не хватает tag.

Ниже приведен пример использования тега баттона:

#define kButtonTag 2 

- (void)viewDidLoad { 
    // ... view setup ... 

    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    // ... button setup ... 

    button.tag = kButtonTag; 

    [super viewDidLoad]; 
} 

- (IBAction)startClicked:(id)sender { 

    if ([sender tag] == kButtonTag) { 
     // do something 
    } 
} 
+0

Большое спасибо! Это намного быстрее, чем передача отправителя в соответствующий класс/объект, а затем получение тега из него !!!! – tmighty

+0

просто быстрый вопрос о вышеуказанном коде: Что делает строка «#define kButtonTag 2» кода? – nfoggia

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