Подтвердить что ты не робот

Как подсмотреть UITableViewController в другом контроллере с помощью раскадровки

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

Я хотел бы встроить эту логику и представление в другой контроллер/представление вида (вроде информации заголовка с прокручиваемой таблицей внизу.)

У меня есть следующие компоненты: CustomViewController, который связан с UIView (перетаскивается из раскадровки) CustomTableViewController, который связан с UITableView (перетаскивается из раскадровки)

По сути, я пытаюсь имитировать сценарий секундомера в приложении часов iOS

  • Каков подход зверя к этому?
  • Как это делается программно?
  • Как это можно сделать на раскадровке?

Любая помощь будет принята с благодарностью. Благодаря

4b9b3361

Ответ 1

Хорошо понял. Это решение относится к iOS 5, поскольку эта функция была добавлена. Этот метод работает с раскадными версиями.

Настройка: цель состоит в том, чтобы разместить один вид контроллеров представления и логику в другом контроллере.

  • Поскольку нет встроенного способа ссылки на контроллер дочернего представления в раскадровке, нам нужно дать контроллеру представления имя. Это можно сделать, заполнив атрибут "Идентификатор" на контроллере в раскадровке. ПРИМЕЧАНИЕ. Убедитесь, что вы даете контроллеру идентификатор, а не вид контроллеров.

  • Создайте экземпляр контроллера, который хотите скопировать. Это можно сделать с помощью хост-контроллера.

    UIViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"ControllerIdentifier"];
    
  • Добавить дочерний контроллер в родительский контроллер

    [self addChildViewController: controller];
    
  • Добавить представление дочерних контроллеров в представление родительских контроллеров. Обратите внимание, что если в родительском контроллере есть представление владельца места размещения, к которому вы хотите добавить дочерний вид, тогда вы это сделаете. Здесь я добавляю его в UIView, который называется stage в родительском контроллере.

    [self clearStage]; 
    [self.stageView addSubview:controller.view];
    presentedController.view.frame = self.stageView.bounds;
    

И это все. Довольно просто. Я успешно использовал его с коммутационными контроллерами и просмотром в домашнем элементе управления вкладками. Подконтроллер подключает свои представления в жизненном цикле просмотра, поэтому viewDidLoad и т.д. Все работают как ожидается в этом контроллере детского представления.

Надеюсь, это поможет кому-то.