Я работал над приложением для iPhone в XCode и Интерфейсном Разработчике типа проекта Панель вкладок. После того, как все таблицы (бизнес-секторы) работали нормально, я понял, что мне нужно добавить элемент управления навигацией, чтобы пользователь мог детализировать таблицу подрубрик (подсекторов).
Как зеленый разработчик Objective-C, это сбивало с толку, но мне удалось заставить его работать, прочитав различную документацию, опробовав несколько различных вариантов IB. Моя текущая настройка - это контроллер панели вкладок с вкладкой 1 в качестве контроллера навигации и вкладкой 2 в виде простого представления с помещенным в него представлением таблицы. Проводка работает: я могу войти, когда строки таблицы выбраны, и я готов поместить новый View Controller в стек, чтобы я мог отобразить подтемы Table View.
Моя проблема: по какой-то причине табличное представление первой вкладки является делегатом и источником данных второй вкладки. Это не имеет смысла для меня, и я не могу понять, почему это единственная установка, которая работает. У меня другие проблемы, которые, как мне кажется, вызваны тупой проводкой.
альтернативный текст http://i43.tinypic.com/30nap85.jpg
Вот проводка:
- Контроллер навигации (Секторы) является
делегат Tab Bar
- Панель навигации
делегат навигационного контроллера
(секторы)
- Представление Contoller (Sectors) имеет представление о представлении таблицы
- Вид таблицы (в навигации
Контролер (Секторы)) является делегатом
первого контроллера взгляда
(Компании)
- Вид таблицы (в навигации
Контроллер (Секторы) является источником данных First View Controller
(Компании)
- First View Controller (компании)
- Первый вид Contoller (Sectors) имеет вид табличного представления
- Табличное представление (в контроллере первого вида (компании)) не подключено к выходу источника данных и не является делегатом
Когда я нажимаю кнопки вкладок и смотрю на Инспектора, я вижу, что первая вкладка правильно подключена к моему MainWindow.xib, а вторая выбрала перо с именем SecondView.xib. Он находится в владельце файла MainWindow.xib, где я наследую UITableViewDataSource и UITableViewDelegate (а также UITabBarControllerDelegate) в .h, и в .m, где я реализую методы делегата.
Почему эта настройка работает только тогда, когда табличное представление на моей первой вкладке (View Controller (Sectors)) является делегатом и источником данных второй вкладки? Я в замешательстве: почему его не нужно подключать к вкладке с включенным контроллером навигации, в которой отображается табличное представление (контроллер навигации (секторы))? Представление таблицы на второй вкладке не имеет ни источника данных, ни участника.
альтернативный текст http://i40.tinypic.com/15ri1ig.jpg
альтернативный текст http://i44.tinypic.com/2dwete9.jpg
У меня проблемы с запуском pushViewController (self.navigationController не равен nil, но новый View Controller по-прежнему не загружается), и я подозреваю, что мне нужно решить эту проблему, прежде чем я смогу выяснить, почему Nav Controller не будет помещать новый View Controller в стек.
if(nil == self.navigationController) {
NSLog(@"self.navigationController is nil.");
} else {
NSLog(@"self.navigationController is not nil.");
SectorList *subsectorViewController = [[SectorList alloc] initWithNibName:@"SectorList" bundle:nil];
subsectorViewController.title = @"Subsectors";
[[self navigationController] pushViewController:subsectorViewController animated:YES];
[subsectorViewController release];
}