Переключение с View Controller в стеке на View Controller не в стек - PullRequest
0 голосов
/ 08 декабря 2011

Я надеюсь, что вы можете мне помочь.Я разработал приложение, которое представляет собой приложение панели вкладок.В контроллере вида для первой вкладки есть кнопка, которая при нажатии генерирует модальный вид.Я инициализировал навигационный контроллер в этом модальном представлении, потому что когда я нажимаю кнопку «Сохранить» в моем модальном представлении (которое я использую для ввода пользовательских данных), я нажимаю на другое табличное представление (которое показывает таблицу всех введенных пользователем данных.до сих пор).В этом табличном представлении у меня есть кнопка «Готово», которая при нажатии должна перейти к другому представлению на вкладке (представление прогресса пользовательского ввода), то есть ВЫКЛЮЧИТЬ стек.

Итак, мой вопрос: если я в стеке два контроллера, как я могу выскочить из стека в другое представление, а НЕ в стек?Я использовал метод popToViewController, но, как вы уже догадались, я получаю сообщение «Попытка получить доступ к контроллеру представления, который не существует».Вот мой простой код во втором представлении стека:

- (IBAction)doneButtonPressed:(id)sender 
{
    LogTableViewController *logTableViewController = [[LogTableViewController alloc]init]; 

    [self.navigationController popToViewController:logTableViewController animated:YES];

    [logTableViewController release];
}

Где LogTableViewController не в стеке, а скорее просто еще одна цель для другой вкладки в приложении.Есть идеи?Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 08 декабря 2011

Я не совсем уверен, почему вы просто не можете поместить новый контроллер представления в стек, но если вам нужно открыть его, вы можете сделать:

    //create new VC
LogTableViewController *newVC = [[LogTableViewController alloc]init];;

//get VC stack
NSMutableArray * newControllers = [NSMutableArray arrayWithArray: self.navigationController.viewControllers];

//choose where to insert the new vc
NSUInteger insert_index = [newControllers count] - 1;

//insert into the stack
[newControllers insertObject:newVC atIndex:insert_index];

//replace stacks
[self.navigationController setViewControllers: newControllers];

//pop to your new controller
[self.navigationController popViewControllerAnimated:YES];

надеюсь, это поможет.

0 голосов
/ 08 декабря 2011

Вы были близки. Просто сделай:

- (IBAction)doneButtonPressed:(id)sender 
{
    LogTableViewController *logTableViewController = [[LogTableViewController alloc]init]; 

    [self.navigationController setViewControllers:[NSArray arrayWithObject:logTableViewController] animated:YES];

    [logTableViewController release];
}
...