2013-02-21 10 views

Odpowiedz

22

Tak:

-(IBAction)pressedButton:(id)sender 
{ 
    id value = [sender valueForKey:key]; 
} 

Należy pamiętać, że nie można używać User Defined atrybut Run Time, chyba podklasy UIButton i dodać go jako silne własności, na przykład

@interface UINamedButton : UIButton 
@property (strong) NSString *keyName; 
@end 

Jeśli ustawisz atrybut User-Defined Run Time, a tego nie zrobisz, Xcode poważnie się zawiedzie.

Następnie można uzyskać tę wartość jak

-(IBAction)clicked:(UIControl *)sender 
    { 
    NSString *test = @"???"; 

    if ([sender respondsToSelector:@selector(keyName)]) 
      test = [sender valueForKey:@"keyName"]; 

    NSLog(@"the value of keyName is ... %@", test); 

    // if you FORGOT TO SET the keyName value in storyboard, that will be NULL 
    // if it's NOT a UINamedButton button, you'll get the "???" 

    // and for example... 
    [self performSegueWithIdentifier:@"idUber" sender:sender]; 
    // ...the prepareForSegue could then use that value in the button. 

    // note that a useful alternative to 
    // if ([sender respondsToSelector:@selector(stringTag)]) 
    // is... 
    // if ([sender respondsToSelector:NSSelectorFromString(@"stringTag")]) 
    } 
Powiązane problemy