2013-02-21 68 views

回答

22

是:除非你继承的UIButton并将其添加为一个强大的属性你不能使用用户定义的运行时间属性,,例如

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

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

如果您设置了“用户定义的运行时间”属性,而您还没有这样做,那么Xcode将不幸地崩溃。

然后,您可以得到像

-(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")]) 
    } 
该值