2011-01-03 3 views
1

Моя ситуация следующая: Мой класс SettingsViewController является подклассом UINavigationController. Этот класс содержит логику своего rootViewController. Например, он действует как делегат и источник данных для двух табличных представлений в этом корневом представлении.Загрузка подкаталога UINavigationController из Nib

У меня нет проблем с настройкой этого программного обеспечения. В инициализаторе SettingsViewController я могу создать дополнительный UIViewController, чтобы служить в качестве контроллера корневого представления, расположить представления таблиц в своем представлении и установить их делегаты и источники данных на self.

Но я хочу загрузить этот корневой вид через Nib. Проблема в том, что я не знаю, как подключить этот Nib с моим SettingsViewController, как установить делегаты и источники данных. SettingsViewController недоступен изнутри Ниба. «Владелец файла» представляет собой контроллер корневого представления, а не SettingsViewController.

Как получить доступ к подклассу UINavigationController изнутри контроллеров корневого представления Nib?

Заранее спасибо.

ответ

2

вы можете объявить представление внутри вашего пин и установить его в классе SettingsViewController (если его вид).

или перетащите контроллер представления в IB и установить этот тип класса SettingsViewController

// EDIT: так что вы хотите, чтобы представить вид, как MFMailComposerViewController. У меня также есть в моем приложении, который делает почти то же самое с MessageViewController:

MessageViewController *mView = [[MessageViewController alloc]initWithNibName:@"MessageView" bundle:nil]; 
mView.navController = [[UINavigationController alloc] initWithRootViewController:mView]; 
[masterView presentModalViewController:mView.navController animated:YES]; 
[mView release]; 

navController уведомление, что является UINavigationController, который подключен в IB к навигационному контроллеру.

+1

Это правильный ответ, но я скептически отношусь к тому, что подклассификация UINavigationController - правильный вопрос. –

+0

Это не работает. Перетаскивание контроллера представления в моем xib просто создает новый 'SettingsViewController'. Обратите внимание, что мой 'SettingsViewController' создан программно, _before_ Я создаю его контроллер корневого представления через xib. – Rits

+0

Прочитав свой комментарий, вы хотите создать контрольный элемент SettingsViewController и представить его с помощью navigationBar, я прав? Итак, в чем проблема, почему вам нужно поднять ее? 'MFMailComposerViewController' не является подклассом' UINavigationController' своего представления с обычным навигационным контроллером (я думаю). Я делаю то же самое в своем приложении, но смотрю приведенное выше. –

1

У вас не будет доступа к объектам, находящимся за пределами вашего Владельца файла в вашем банке. Вам необходимо будет настроить эти свойства программно после загрузки вашего представления из этого nib; ваш rootViewController может установить делегаты и источники данных своих таблиц в его -viewDidLoad.

Кроме того, я должен спросить, почему вы подклассифицировали UINavigationController. Ссылки на классы предупреждают вас, что «этот класс не предназначен для подкласса». Вероятно, есть лучшее место для вашей логики делегата/источника данных, если это все, что вам нужно для этого параметра SettingsViewController.

+0

Интересно, почему Apple рекомендует против подкласса UINavigationController. Они делают это сами с MFMailComposeViewController. – Rits

+0

Как и любой другой контроллер контейнера, UINavigationController использует частные API при отображении других UIViewControllers. Например, UINavigationController устанавливает свойства parentViewController и navigationController на контроллерах представления, которые он отображает. Поскольку для нас нет общедоступного API для того, чтобы сделать тот же подкласс, который пытается переопределить поведение UINavigationController, будет проблематичным. Поскольку Apple может видеть детали того, что UINavigationController делает внутренне и предпочитает использовать свои собственные частные интерфейсы, это не проблема для них. – Jonah

+0

Я не переопределяю поведение UINavigationController. – Rits

Смежные вопросы