Нажмите UIViewController в UINavigationController из всплывающего окна

У меня проблема при попытке вставить новый контроллер представления в существующий контроллер навигации.

То, что я пытаюсь сделать, это сделать UIPopoverController появляются при нажатии на навигацию UIBarButtonItemи из этого "выпадающего меню" выберите пункт меню, который будет выдвигать соответствующий контроллер вида на "основной" контроллер навигации.

Я попробовал следующее, которое дает модальное. Но я хочу, чтобы мнение было изменено.Если выбрать толчок вместо модального, результат будет следующим.

Я также попытался сделать заказ UITableViewController (на всплывающем окне), из которого я попробовал следующий код:

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    UINavigationController *dash = [storyboard instantiateViewControllerWithIdentifier:@"dash_nav"];
    UIViewController *students = [storyboard instantiateViewControllerWithIdentifier:@"students"];

    if (indexPath.row == 0) {
       [dash pushViewController:students animated:YES];
//     [[dash navigationController] presentViewController:students animated:YES completion:nil];
    }
    NSLog(@"%@", [dash title]);
    NSLog(@"index = %i", indexPath.row);
}

Есть ли способ сделать то, что я пытаюсь сделать?

1 ответ

Решение

Этот код:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UINavigationController *dash = [storyboard instantiateViewControllerWithIdentifier:@"dash_nav"];
UIViewController *students = [storyboard instantiateViewControllerWithIdentifier:@"students"];

создает слишком много новых экземпляров. Вы должны использовать существующую раскадровку (self. storyboard) и существующий навигационный контроллер. Контроллер навигации необходимо передать контроллеру табличного представления (который следует использовать, потому что раскадровка не имеет необходимой информации). Мы назовем это originatingNavigationControllerновый @property на контроллере представления таблицы.

Когда программа запускает показ всплывающего окна, установите ссылку контроллера навигации в контроллер представления назначения (представление таблицы).

Затем в didSelectRowAtIndexPath: метод, который вы просто создаете students ВК и толкни его:

UIViewController *students = [self.storyboard instantiateViewControllerWithIdentifier:@"students"];
[self.originatingNavigationController pushViewController:students animated:YES];

и тогда контроллер табличного представления должен отклонить себя (его popover).

Другие вопросы по тегам