2012-06-06 11 views
6

Mam funkcji (na przykład Function1) gdzie mam przycisk i obiekt o nazwie auxiliarStruct i mam ten wiersz:jak zaimplementować właściwość addTarget w UIButton

[btn addTarget:self action:@selector(userSelected:) forControlEvents:UIControlEventTouchUpInside]; 

ale w @selector (userSelected) Muszę przekazać jako parametry obiekt potrzebny w tej funkcji, ale nie wiem jak to zaimplementować. I oświadczyli, że sprzeciw tutaj:

//UsersController.h 
#import <UIKit/UIKit.h> 

@interface UsersController : NSObject{ 
    NSInteger *prof_id; 
    NSString *createTime; 
    NSString *fullName; 
    NSString *thumb; 
} 

@property (nonatomic) NSInteger *prof_id; 
@property (nonatomic, retain) IBOutlet NSString *createTime; 
@property (nonatomic, retain) IBOutlet NSString *fullName; 
@property (nonatomic, retain) IBOutlet NSString *thumb; 

@end 

Mam wywoływana funkcja zadeklarowana następująco:

-(void)userSelected:(id)sender{ 
    //CODE 
} 

mam obiektu tej klasy, zwane auxiliarStruct i to, że muszę. Próbowałem z

[btn addTarget:self action:@selector(**userSelected:auxiliarStruct**)forControlEvents:UIControlEventTouchUpInside]; 

ale to nie działa Czy ktoś może mi pomóc? Dzięki.

PS: Przepraszam za mój angielski, wiem, że to jest złe

+1

jaki rodzaj parametru? Czy możesz dać przykład? – Pfitz

+0

Obiekt z własnej klasy z 4 nsstrings wewnątrz: UsersController: NSObject { NSInteger * prof_id; NSString * createTime; NSString * fullName; NSString * thumb; } –

+0

Pfitz, ja zredagowałem pytanie. Mam nadzieję, że teraz go rozumiesz –

Odpowiedz

18

można jedynie zdać (UIButton*) obiekt jako parametr z addTarget @selector metody. Możesz ustawić znacznik UIButton i użyć go w wywołanej funkcji. Możesz dowiedzieć się jakiejkolwiek alternatywy do wysyłania wartości ciągu.

Użyj poniższego kodu do przekazywania znacznika z przycisku:

 btn_.tag = 10; 
    [btn_ addTarget:self action:@selector(functionName:) forControlEvents:UIControlEventTouchUpInside]; 

Akcja przycisk powinien wyglądać następująco:

- (void) functionName:(UIButton *) sender { 

    NSLog(@"Tag : %d", sender.tag); 

} 
+0

to nie działa, zObject nie jest obsługiwany w addTarget –

+0

@ nanoDev Ok. Sprawdzę – Vaquita

+0

OK, dzięki Neptune –

1

Impreza wyśle ​​przycisku jako parametr, więc:

-(void)userSelected:(id)sender { 

      UIButton *button = sender; 
      ... 
    } 
3

Nie wiem, czy można dodać parametry do działania przycisku, nigdy nie spotkałem takiego met od.

Najbliższą rzeczą, jaką zrobiliśmy, było wybranie różnych znaczników do przycisków i rozróżnienie działań zgodnie z tagami.

W każdym razie nie jest to dokładnie odpowiedź na twoje pytanie, ale proponuję jako alternatywę użyć właściwości klasy zamiast wysyłać parametr. Na przykład:

  • kliknięciu na przycisk i chcesz wysłać „test” wartość do selektora. Zamiast wysyłać "test", ustawiasz tę właściwość klasy na "test" i w selektorze czytasz ją z tego miejsca. Nie wiem, czy to pasuje do twoich potrzeb w 100%, ale uważam, że jest to opcja.

Podnosi się jednak ciekawe pytanie. Postaram się spojrzeć na niego w przypadku będę go potrzebować zbyt często i jeśli znajdę coś, będę aktualizować moją odpowiedź

[edytuj] Widocznie nie jesteś jedyną osobą z tym pytaniem: How can I pass a parameter to this function? W ten nie było też standardowego rozwiązania i użyto tagu.