Редактировать.Найден более аккуратный способ!
Один аргумент, который может получить кнопка - (id)sender
.Это означает, что вы можете создать новую кнопку, унаследованную от UIButton, которая позволит вам хранить другие предполагаемые аргументы.Надеюсь, эти два фрагмента иллюстрируют, что делать.
myOwnbutton.argOne = someValue
[myOwnbutton addTarget:self action:@selector(buttonTouchUpInside:) forControlEvents:UIControlEventTouchUpInside];
и
- (IBAction) buttonTouchUpInside:(id)sender {
MyOwnButton *buttonClicked = (MyOwnButton *)sender;
//do as you please with buttonClicked.argOne
}
Это было мое первоначальное предложение.
Тамэто способ достичь того же результата, но это не красиво.Предположим, вы хотите добавить параметр в ваш метод navigate
.Приведенный ниже код не позволит вам передать этот параметр в navigate
.
[button addTarget:self action:@selector(navigate) forControlEvents:UIControlEventTouchUpInside];
Чтобы обойти это, вы можете переместить навигацию method
в собственный класс и установить "параметры" в качестве атрибутов этого класса ...
NavigationAid *navAid = [[NavigationAid alloc] init];
navAid.firstParam = someVariableOne
navAid.secondParam = someVariableTwo
[button addTarget:navAid action:@selector(navigate) forControlEvents:UIControlEventTouchUpInside];
Конечно, вы можете сохранить метод navigate в исходном классе и вызывать его с помощью navAid, если он знает, где его найти.
NavigationAid *navAid = [[NavigationAid alloc] init];
navAid.whereToCallNavigate = self
navAid.firstParam = someVariableOne
navAid.secondParam = someVariableTwo
[button addTarget:navAid action:@selector(navigate) forControlEvents:UIControlEventTouchUpInside];
Как я уже сказал, это не красиво, но он работал дляя и я не нашли никого, кто предлагал бы другое рабочее решение.