Изменение кадра дочернего представления при повторном нажатии из родительского контроллера представления

Я добавил представление контроллера представления в качестве дочернего представления в другом контроллере представления. Контроллер дочернего представления имеет табличное представление. Контроллер дочернего представления можно нажать более одного раза, нажав didSelectRow, чтобы отобразить обновленные данные в том же контроллере представления, который работает нормально. Но когда я нажимаю контроллер дочернего представления из моего родительского представления, дочернее представление меняет свой фрейм на исходный фрейм контроллера представления и покидает родительское представление. Поэтому я хочу убедиться, что он всегда будет оставаться в рамке своего родительского представления, а push и pop будут происходить только внутри родительского представления.

Добавление дочернего представления:

 UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Home" bundle:nil];
    ChildViewController *vc = [sb instantiateViewControllerWithIdentifier:@"ChildViewController"];
    [self addChildViewController:vc];
    [vc.view setFrame:self.tableFilters.frame];
    [self.viewContainer addSubview:vc.view];
    [vc didMoveToParentViewController:self];

Код, написанный в методе didSectRow дочернего контроллера просмотра:

ChildViewController *newMyTableVC = [self.storyboard instantiateViewControllerWithIdentifier:@"ChildViewController"];
   newMyTableVC.delegate = self;
   [self.tableView reloadData];
   [self.navigationController pushViewController:newMyTableVC animated:YES];

person Aman Pratap    schedule 30.06.2018    source источник
comment
Можете ли вы показать несколько скриншотов вашей установки? Меня смущает тот факт, что вы добавляете дочернее представление в viewContainer, но устанавливаете его фрейм в tableFilters фрейм.   -  person André Slotta    schedule 30.06.2018
comment
Является ли ChildViewController подклассом UINavigationController?   -  person André Slotta    schedule 30.06.2018
comment
Нет, это подкласс UIViewController.   -  person Aman Pratap    schedule 30.06.2018


Ответы (1)


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

Чтобы заставить работать нажатие и выталкивание в вашем контроллере дочернего представления, вы должны встроить контроллер дочернего представления в UINavigationController:

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Home" bundle:nil];
ChildViewController *vc = [sb instantiateViewControllerWithIdentifier:@"ChildViewController"];
UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:vc];
[self addChildViewController:nc];
[nc.view setFrame:self.tableFilters.frame];
[self.viewContainer addSubview:nc.view];
[nc didMoveToParentViewController:self];
person André Slotta    schedule 30.06.2018
comment
Как бы я об этом не подумал. Это блестяще, все отсортировано по объективу c. - person Aman Pratap; 30.06.2018