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

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

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

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

введите описание изображения здесьЯ также пытался создать собственное 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);
}

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


person mrjensen    schedule 15.01.2014    source источник
comment
Две вещи. Во-первых, как вы сделали эти маленькие таблицы в раскадровке? Во-вторых, если вы используете master-detail, вы можете использовать replace вместо push.   -  person Marc    schedule 15.01.2014


Ответы (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 VC и нажимаете его:

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

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

person Wain    schedule 15.01.2014
comment
Это именно то, что мне было нужно! Спасибо. - person mrjensen; 15.01.2014