Как отправить параметры в селектор? - PullRequest
0 голосов
/ 25 сентября 2011

Я знаю, что для отправки параметра в селектор мы используем withObject, но как обработать следующий случай:

 UIBarButtonItem* backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:[[NavigatorUtil new] autorelease] action:@selector(back:) ];

Метод возврата выглядит так:

#import "NavigationUtil.h"

@implementation NavigationUtil

+(void) back: (UINavigationController*) navigationController
{
    [navigationController popViewControllerAnimated:YES];
}

@end

Теперь мне нужно отправить параметр в этот селектор? Как?

Ответы [ 2 ]

0 голосов
/ 25 сентября 2011

При предоставлении селекторов в качестве действия вы обычно полагаетесь на переменные-члены (iVar).

В вашем случае сохраните контроллер навигации как iVar и затем обратитесь к нему из действия селекторов.

Кроме того, вы настраиваете его как код, но в случае, если вам когда-нибудь захочется связать этот метод как действие в конструкторе интерфейса, вы должны заставить его возвращать IBAction, который компилятор разрешает аннулировать, но это подсказка для конструктора интерфейса.Обратите внимание, что это также не должен быть метод класса.

- (IBAction) back
{
    [[self _navigationController] popViewControllerAnimated:YES];
}

Другой вариант, на который вы можете обратить внимание, - это блоки, которые позволяют отправлять методы с параметрами, или встроенный блок кода, который также помогает, когда вы хотите избежатьгосударство-член (например, асинхронный / параллельный код).

Оформить эту статью SO:

Блок UIButton, эквивалентный addTarget: action: forControlEvents: метод?

Надеюсь, что поможет

0 голосов
/ 25 сентября 2011

Что вы имеете в виду "отправить параметр в этот селектор"?Эта фраза не вычисляется.

Мне кажется, вам стоит немного RTFM, например, Руководство по обработке событий для iOS.

Короче говоря, «действие» кнопки - это сообщение, котороекнопка отправляет на свою цель.В Objective-C сообщение определяется его селектором, который можно более или менее рассматривать как имя метода и сигнатуру.

Кнопка знает о трех сигнатурах этого селектора: ноль, один или два аргумента.В вашем случае вы используете метод с одним аргументом.Вы не можете решить, что это будет.Этот аргумент всегда один и тот же.Это будет отправитель, то есть сама кнопка.

Так что проблема # 1 с вашим методом действия.

Проблема # 2 с вашим методом действия в том, что вы определили его как метод класса,Это должен быть метод экземпляра.

Теперь, наконец, если вы хотите связаться с UINavigationController из NavigatonUtil, вам нужно найти другой путь.Например, чтобы сохранить его заранее как переменную экземпляра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...