2013-07-25 6 views
-2

Допустим, у меня есть 10 кнопок. Для каждой кнопки я хочу передать какой-то текст ... например. Кнопка 1, Моя новая кнопка 2 и т. Д.как передавать данные при нажатии кнопки

Что я хочу сделать, это напечатать этот текст в NSLog.

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

[myButton addTarget:self action:@selector(btnSelected:) forControlEvents:UIControlEventTouchUpInside]; 

-(IBAction)btnSelected:(id)sender { 
    NSLog(@"btnSelected data is %@", sender); 
    // I want to print some text for respective button here...  
} 

Но я не получаю ... любая идея, как получить это сделать?

ответ

-1

Попробуйте это,

[myButton setAccessibilityValue:@"Some text"]; 
[myButton addTarget:self action:@selector(btnSelected:) forControlEvents:UIControlEventTouchUpInside]; 

-(IBAction)btnSelected:(id)sender { 
    NSLog(@"btnSelected data is %@", [sender accessibilityValue];); 
    // I want to print some text for respective button here...  
} 
+0

благодарит тонну ... будет принимать ответ через 9 минут;) –

+3

Это очень неправильно, концептуально. Затухание возможностей доступа к пользовательскому интерфейсу? Ни в коем случае ... –

+3

@ H2CO3 У меня возникает соблазн сказать, что этот ответ дает рак ... – Peres

2

Вы можете связать данные с объектами как:

Во-первых импортировать этот класс: #import <objc/runtime.h>

Затем создать ключ, как

static char * kIndexPathAssociationKeySTR = "associated_string_key"; 

затем доцентом string as: ** Здесь вы можете связать у типа данных с помощью кнопки, как: NSMutableArray или NSString etcetra **

NSString *myAttachedValue = @"This is the info I am associating with button"; 
objc_setAssociatedObject(self.testBtn, 
         kIndexPathAssociationKeySTR, 
         myAttachedValue, 
         OBJC_ASSOCIATION_RETAIN); 

затем получить доступ к нему в вашем методе вы назвали на кнопке событии, как:

Надеется, что это помогает.

1

набор тегов для кнопки

[myButton addTarget:self action:@selector(btnSelected:) forControlEvents:UIControlEventTouchUpInside]; 
myButton.tag = 1; 

Сравним теперь тег

-(IBAction)btnSelected:(id)sender { 
    UIButton *button = (UIButton *) 
    if(button.tag == 1) { //do button 1 stuff 
     NSLog(@"btnSelected data is %@", sender); 
    } 
} 

Также вы можете, вероятно, кассовые блоки, расширить UIButton для поддержки блоков (UIButton block equivalent to addTarget:action:forControlEvents: method?).

0

На самом деле вы не можете передавать аргументы в @selector(method:). Проверьте эти ссылки:

Passing parameters on button action:@selector

и

Passing parameters to addTarget:action:forControlEvents

+0

«Вы не можете передавать аргументы»? В самом деле? Тогда какой его ** аргумент **? –

+0

Аргумент - это только идентификатор '(id), как указано во второй ссылке – iphondroid

+0

Да, это так. И разве это не аргумент? –