14

UIButtonストーリーボードのシーンがあります。ボタンには User-Defined-RunTime-Attribute 'type'(String) が構成されています。ボタンを押すと電話が鳴る

-(IBAction)pressedButton:(id)sender

「sender」から User-Defined-RunTime-Attribute にアクセスできますか?

4

1 に答える 1

22

はい:

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

UIButton をサブクラス化し、強力なプロパティとして追加しない限り、ユーザー定義のランタイム属性を使用できないことに注意してください。

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

User Defined Run Time 属性を設定していて、これを行っていない場合、残念ながら 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")] )
    }
于 2013-02-21T16:39:39.637 に答える