Лучший способ определить отправителя события - PullRequest
3 голосов
/ 15 октября 2011

У меня простой вопрос об обработке событий в приложениях iOS ... предположим, у вас есть приложение с несколькими кнопками, которые реагируют на событие TouchUpInside, вызывающее одно и то же действие, каков наилучший способ в методе действия понять, что такоекнопка, которая вызвала событие?Я знаю, что это легко сделать, используя заголовок кнопки, но я думаю, что это не лучший способ, если у вас есть локализованное приложение, в котором текст кнопки может измениться (если нет возможности изменить локализацию заголовка, т.е.получить исходную строку из локализованной строки) ... есть ли хорошая практика по этой теме?Должен ли я использовать какое-то другое свойство кнопок, чтобы различать разные кнопки?

Заранее благодарен за любую помощь.

Ответы [ 2 ]

9 голосов
/ 16 октября 2011

Существует нечто, называемое «тег», которое вы можете установить для кнопок UIB, или что-то, что может ответить на событие по этому вопросу. Если вы используете Interface Builder, щелкните инспектор атрибутов для элемента и выберите значение для тега (целое число). В вашем коде сделайте что-то вроде этого ...

...

- (IBAction)buttonReceived:(id)sender
{ 
    if ([sender tag] == 1) {
       //Do something
    }
    else if ([sender tag] == 2) {
       //Do something else
    }
}
3 голосов
/ 16 октября 2011

В дополнение к свойству tag, или на тот случай, если вы уже используете тег для какой-либо другой цели, которая будет означать дублирование значений тега для одной или нескольких разных кнопок, вы всегда можете настроить ivar IBOutlet для каждой нужной вам кнопки. проверить, а затем в IBAction сделать что-то вроде этого:

- (IBAction)buttonReceived:(UIButton *)sender
{ 
    if (sender == myButtonA) {
       // processing for button A
    }
    else if (sender == myButtonB) {
       // processing for button B
    }
}

Это немного больше работы, но иногда она может пригодиться.

...