Могу ли я определить новое исходящее действие для подключения в Интерфейсном Разработчике? - PullRequest
0 голосов
/ 20 августа 2011

Хорошо, я действительно хочу изменить вкладку, когда пользователь нажимает кнопку во всплывающем окне AlertView.

Мой пользовательский FirstViewController создает AlertView и устанавливает себя в качестве делегата. Я хочу, чтобы FirstViewController предпринял некоторые действия, но затем я также хочу изменить вкладку в интерфейсе представления вкладок. FirstViewController вообще не знает об интерфейсе вкладок. Я мог бы добавить соединение, чтобы FirstViewController знал об этом, но мне это кажется не элегантным.

То, что я хотел бы сделать, это определить исходящее действие в FirstViewController и иметь возможность подключить его в Интерфейсном Разработчике к IBAction для какого-либо объекта вне FirstViewController, который знает об интерфейсе вкладки, может быть, мой делегат приложения, возможно, другой пользователь просмотр контроллера у меня называется MenuViewController. Затем я бы вызвал его из FirstViewController alertView: clickedButtonAtIndex:

В своем коде я знаю, как создавать IBOutlets, исходящие соединения с другими объектами. Я знаю, как создавать IBActions, цели входящих действий, которые могут вызывать другие объекты. То, что я хочу, - это возможность создать «IBOutletAction», чтобы я мог указать на IBAction в другом объекте. UIControls так или иначе определяют «IBOutletActions», которые сообщают Интерфейсному Разработчику, какие события у них есть, которые могут быть связаны с IBActions других объектов. Могу ли я сделать то же самое, или это достигается для UIControls каким-то секретным моджо, который работает только для классов Apple? Если я не могу точно продублировать его, что вы посоветуете для простейшего приближения? Я могу определить действие -setTarget: (id) target forAction: (SEL) для FirstViewController и связать его в коде, но в идеале я хочу что-то, что можно установить в Интерфейсном Разработчике.

1 Ответ

0 голосов
/ 20 августа 2011

Под «интерфейсом представления вкладок» вы подразумеваете UITabBarController?Если это так, все контроллеры представления знают о панели вкладок верхнего уровня через свойство tabBarController, так что вы можете получить к нему таким образом.Вместо этого может иметь смысл добавить метод к классу, которому принадлежит UITabBarController, и попросить его сделать то, что вы хотите, для лучшей структуры программного обеспечения.Например, если это приложение-делегат, которое его создало, просто перейдите к нему и вызовите метод, который будет манипулировать для вас панелью вкладок (это, IMHO, лучше структурировано, поскольку логика и особенности манипулирования этим не содержатся в вашем классеНапример, если вы изменили свой фреймворк, который имел другое представление для панели вкладок (стиль Three20?), Эта функция-член могла бы инкапсулировать это изменение, и ваш класс не знал бы никакой разницы).

...