2015-02-24 3 views
0

У меня есть UIViewController, который содержит как, карта и Tableview, которые соединены друг с другом, и это выглядит примерно так:UITableView переход в той же ViewController

enter image description here

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

Аналогичные поведении можно наблюдать и в iPad TableView контроллерах, размещенных в popover. Как мне это сделать в Swift (iOS 8)?

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

+0

Для такой ситуации можно использовать вид контроллера сдерживания. В раскадровке вы можете перетащить объект «Container View» в пространство и добавить к нему контроллер навигации, тогда вы сможете делать обычные вещи контроллера навигации. Вы также можете сделать это в коде, просто добавив представление navigationController в качестве подвью. – DBoyer

ответ

2

Вы можете достичь вид контроллера сдерживания так:

- (void)viewDidLoad { 
     [super viewDidLoad]; 

     // Setup the container view 
     _containerView = [[UIView alloc] initWithFrame: // DESIRED FRAME]; 
     _containerView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
     [self.view addSubview:_containerView]; 

     // Setup the main view controller 
     [self addChildViewController:_mainViewController]; 
     _mainViewController.view.frame = _containerView.bounds; 
     [_containerView addSubview:_mainViewController.view]; 
     [_mainViewController didMoveToParentViewController:self]; 
} 

Теперь вы можете создать оба представления таблицы в отдельных контроллерах зрения. Похоже, вы должны добавить контроллер навигации («mainViewController» в фрагменте кода) к основному контроллеру представления, чтобы вы могли «нажимать» новую таблицу на стек.

+0

Приветствия, помощник. Я получил вашу логику, несмотря на то, что я хотел ее в Swift :) – kernelpanic

+0

К сожалению, пропустил часть Swift :) Рад, что я мог бы быть полезным :) – DBoyer

0

Это технически не является «толчок» - когда пользователь выбирает ячейку на вашем Tableview, вызвав вызов метода TableView делегата

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 

... вы должны принести во втором табличном с правой стороны экрана.

Каждый из ваших методов представления данных datasource и делегатов должен отличаться от первого и второго табличных представлений. Вот пример для cellForRowAtIndexPath:

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    if tableView == self.tableView1 { 
     return self.collection1.count 
    } else if tableView == self.tableView2 { 
     return self.collection2.count 
    } 
    return 0; 
} 
+0

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

+0

true. ваша очередь отправить ответ :) –

+0

Хорошо справедливо. Я сделаю это сейчас. – DBoyer

0

Я думаю, вы должны использовать Basic UIView анимации, чтобы показать таблицу секунд движущуюся с левой стороны экрана на didSelectRowAtIndexPath для первой таблицы

Смежные вопросы