How to access User Defined Runtime Attribute from the 'sender' object?

前端 未结 1 561
情书的邮戳
情书的邮戳 2020-12-15 07:50

I have a UIButton in a Storyboard scene. The button has a User-Defined-RunTime-Attribute \'type\'(String) configured. When pressed the button calls

相关标签:
1条回答
  • 2020-12-15 08:20

    Yes:

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

    Note that you cannot use a User Defined Run Time attribute, unless you subclass UIButton and add it as a strong property, for example

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

    If you set a User Defined Run Time attribute, and you have not done this, Xcode will badly crash unfortunately.

    You can then get that value like

    -(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")] )
        }
    
    0 讨论(0)
提交回复
热议问题