Как вложить навигационный контроллер внутри UIPopOverController? - PullRequest
0 голосов
/ 28 апреля 2011

На самом деле в игре три вида.Мой homeView, с которого я запускаю средство выбора, которое устанавливает представление StudyPickerController от имени root для navController, который затем представляется внутри popOverController.Затем из представления StudyPickerController мне нужно передать в ScreenPickerController полностью другое представление.

У меня есть UIPopOverController, который отображает содержимое представления, являющегося tableView.Я хотел бы иметь возможность выдвинуть новое представление с помощью viewController внутри этого представления, но, как я буду обсуждать, оно действительно близко, но оно просто не будет выдвигаться!

Итак, из моего homeView, когдакнопка нажата, вызывается действие и запускается этот код:

self.studyPicker = [[[StudyPickerController alloc] initWithStudyArray:self.studyArray ViewNum:butto.tag] autorelease];

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:self.studyPicker];   

_studyPicker.delegate = self;
self.studyPickerPopover = [[[UIPopoverController alloc] initWithContentViewController:navController] autorelease];               

[self.studyPickerPopover presentPopoverFromRect:CGRectMake(120,45, 10,10) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

И это работает довольно хорошо!PopOverController отображает содержимое моего StudyPickerController без каких-либо проблем.У меня такое ощущение, что я действительно получаю доступ к своему навигационному контроллеру, потому что у рамки popOverController вверху есть полоса, а не просто тонкая граница, у нее есть навигационная панель.

Так что теперь, когда я хочучтобы выбрать строку в этом представлении, я бы хотел перейти к новому представлению, также с табличным представлением, с помощью моего navigationController.Это код:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    NSArray * array = [_studyArray objectAtIndex:indexPath.row];

    ScreenPickerController * picker = [[ScreenPickerController alloc] init];
    picker.seriesGUID = array;
    picker.viewNumber = viewNumber;

    [self.navigationController pushViewController:picker animated:YES];
}

Мне кажется, это должно работать!Но, увы, я нажимаю на строку, и она выделяется, и ничего не происходит.

Я работал над этим весь день, так что вполне возможно, что я что-то упустил, но я незнать, что это такое.Любая помощь приветствуется

1 Ответ

1 голос
/ 28 апреля 2011

Кажется, здесь задействованы два класса: ваш класс homeView и StudyPickerController. Я предполагаю, что метод tableView:didSelectRowAtIndexPath: будет в классе homeView?

В этом случае self.navigationController пытается получить доступ к контроллеру навигации, в котором находится homeView, не к контроллеру навигации, который вы вставили в поповер. Поскольку homeView отсутствует даже в навигационном контроллере, средство доступа возвращает ноль.

Вместо этого вы захотите использовать что-то вроде [self.studyPicker.navigationController pushViewController:picker animated:YES];.

...