2013-02-21 20 views

Antwort

22

Ja:

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

Beachten Sie, dass Sie keine benutzerdefinierten Run Time Attribut verwenden können, es sei denn, Sie UIButton Unterklasse und fügen Sie es als eine starke Eigenschaft, zum Beispiel

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

Wenn Sie ein benutzerdefiniertes Laufzeitattribut festgelegt haben und dies noch nicht erfolgt ist, stürzt Xcode leider leider ab.

Sie können dann diesen Wert erhalten wie

-(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")]) 
    } 
Verwandte Themen