Как созданные подвиги во время выполнения взаимодействуют с контроллером представления? - PullRequest
0 голосов
/ 01 октября 2010

Для разработки под iOS, если вы создадите и добавите вспомогательное представление во время выполнения, как вы позволите ему взаимодействовать с контроллером представления?Поскольку вложенное представление не создается в nib, вы не можете использовать Interface Builder для перетаскивания соединения в метод IBAction на контроллере.Я не вижу очевидного способа захватить ручку контроллера с точки зрения.Или я смотрю на это неправильно и вместо этого должен общаться с ним косвенно через NSNotificationCenter?

Ответы [ 3 ]

0 голосов
/ 01 октября 2010

Большинство представлений не взаимодействуют напрямую с контроллером представлений.Скорее, они подключены к IBOutlet или используют target-action для вызова метода на контроллере представления.

В первом случае просто объявите свойство IBOutlet, как обычно, иустановите его после создания представления.(Обратите внимание, что технически вам не нужно ключевое слово IBOutlet, поскольку вы не устанавливаете соединение в IB, но я не думаю, что это повредит.)

self.myViewOutlet = myNewView;

Если ваш UIView является подклассомиз UIControl , используйте addTarget: action: forControlEvents: , чтобы методы вашего контроллера представления вызывались при возникновении определенных событий в элементе управления.

[myNewControl addTarget:self action:@selector(mySelector:) forControlEvents:UIControlEventTouchDragInside];
0 голосов
/ 01 октября 2010

Отвечая на него сам ... Я создавал эти подпредставления из родительского представления, поэтому там тоже не было доступа к контроллеру, поэтому self в примерах кода из других ответов было невозможно.Но затем, немного подумав, я решил переместить код в сам контроллер, но вместо этого решил использовать делегат, а не целевое действие, потому что это пользовательское сообщение, а не просто событие касания.Спасибо тем, кто помог.

0 голосов
/ 01 октября 2010

Что вы пытаетесь общаться? IBActions предназначены для предопределенных (или вновь определенных, если вы хотите пройти через сложность добавления элемента UI ur в IB) элементов пользовательского интерфейса, которые могут активировать некоторый селектор при некотором взаимодействии, для которого вы всегда можете получить тот же эффект программно ... , чтобы создать UIButton во время выполнения вы можете сделать ..

 UIButton *button=[[UIButton alloc] initWithFrame:frame];
   [button addTarget:self action:@selector(myAction:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];

Все, что вы можете делать в конструкторе интерфейсов, вы также можете делать и программно ... вам просто нужно искать методы, которые будут привязывать действия к элементу пользовательского интерфейса ... надеюсь, это поможет.

После прочтения вашего комментария: Вы можете рассмотреть возможность создания кнопок из контроллера представления вместо представления, возможно, это может быть правильный способ сделать это (хотя не знаю ваших обстоятельств) ... Если нет, то либо представление может обрабатывать ваши события и использовать протокол для делегировать события контроллеру представления, или вы можете использовать протокол для регистрации в качестве цели для элемента пользовательского интерфейса, есть много способов решить вашу проблему, каковы ваши обстоятельства?

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