Как получить доступ к атрибуту Runtime User Defined Runtime из объекта 'sender'? - программирование
Подтвердить что ты не робот

Как получить доступ к атрибуту Runtime User Defined Runtime из объекта 'sender'?

У меня есть UIButton в сцене раскадровки. Кнопка имеет настроенный пользователем параметр "Тип" ( "Строка" ). При нажатии кнопки происходит вызов

-(IBAction)pressedButton:(id)sender

Могу ли я получить доступ к атрибуту User-Defined-RunTime-Attribute из 'sender'?

4b9b3361

Ответ 1

Да:

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

Обратите внимание: вы не можете использовать атрибут User Defined Run Time, , если вы не подклассифицируете 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 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")] )
    }