UIButton
ストーリーボードのシーンがあります。ボタンには User-Defined-RunTime-Attribute 'type'(String) が構成されています。ボタンを押すと電話が鳴る
-(IBAction)pressedButton:(id)sender
「sender」から User-Defined-RunTime-Attribute にアクセスできますか?
UIButton
ストーリーボードのシーンがあります。ボタンには User-Defined-RunTime-Attribute 'type'(String) が構成されています。ボタンを押すと電話が鳴る
-(IBAction)pressedButton:(id)sender
「sender」から User-Defined-RunTime-Attribute にアクセスできますか?
はい:
-(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")] )
}