Как вы соединяете события в контроллерах представления, созданных полностью в коде, без конструктора интерфейса?

#objective-c #xcode #ios

#objective-c #xcode #iOS

Вопрос:

Я создал UINavigationController с UINavigationBar, у которого UIBarButtonItem находится в нужном положении ПОЛНОСТЬЮ в коде, файла IB / .xib нет.

Будучи новичком в XCode (v4) из C #, я пытаюсь понять, как перехватывать и обрабатывать событие нажатия кнопки на панели навигации.

В C # было бы событие click, которое вы бы переопределили, которое содержало бы код обработки события.

Я нашел несколько примеров, которые используют IB для подключения объектов пользовательского интерфейса, таких как кнопка, к методу в контроллере представления. Однако я не могу найти никаких примеров того, как добиться этого исключительно в коде.

Любые ссылки на идеи приветствуются.

Ответ №1:

В вашем методе viewDidLoad создайте UIBarButtonItem, используя один из следующих инициализаторов…

 – initWithImage:style:target:action:
– initWithTitle:style:target:action:
  

Последние два параметра для инициализаторов позволяют вам указать объект для вызова при выполнении действия и метод для этого объекта для вызова, т. е.

 UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStylePlain target:self action:@selector(methodForItem:)];
  

Ссылка на класс UIBarButtonItem от Apple

Ответ №2:

Вы захотите использовать Target / Action для элемента кнопки правой панели. Итак, после создания вашего экземпляра UIBarButtonItem вы сделаете что-то вроде этого.

[barButtonItem addTarget:self action:@selector(methodThatShouldBeCalled:) forControlEvents:UIControlEventTouchUpInside];

Комментарии:

1. Если я не ошибаюсь, то то, что вы предлагаете здесь, будет работать для UIButton, а не для UIBarButtonItem.