Ios 如何从';发送方';对象

Ios 如何从';发送方';对象,ios,objective-c,xcode,interface-builder,Ios,Objective C,Xcode,Interface Builder,我在故事板场景中有一个ui按钮。该按钮配置了用户定义的运行时属性“类型”(字符串)。当按下按钮时,电话响了 -(iAction)按按钮:(id)发送者 我能否从“发件人”访问用户定义的运行时属性 是: -(IBAction)pressedButton:(id)sender { id value = [sender valueForKey:key]; } 请注意,您不能使用用户定义的运行时属性,,除非您将UIButton子类化并将其作为强属性添加,例如 @interface UINam

我在故事板场景中有一个
ui按钮。该按钮配置了用户定义的运行时属性“类型”(字符串)。当按下按钮时,电话响了

-(iAction)按按钮:(id)发送者

我能否从“发件人”访问用户定义的运行时属性

是:

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

请注意,您不能使用用户定义的运行时属性,,除非您将UIButton子类化并将其作为强属性添加,例如

@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")] )
    }