2015-02-24 82 views
0

我有一个包含一个UIViewController两个,一张地图和一个的tableView连接在一起,它看起来是这样的:的UITableView赛格瑞

enter image description here

而且我希望能够将tableView推送到同一个视图控制器内的另一个tableView,以便地图保持它在哪里。当然,我希望能够通过一个会出现在左上角的navbaritem中的按钮以编程方式向后退开segue。

类似的行为可以在放置在popover中的iPad tableView控制器中观察到。我将如何去在Swift(iOS 8)中执行此操作?

任何代码片段或指向现有代码示例的指针都非常感谢。

+0

对于这种类型的情况下,你可以使用视图控制器遏制。在故事板中,您可以将“容器视图”对象拖入空间并添加导航控制器,然后您可以执行常规导航控制器。您还可以通过简单地将navigationController视图添加为子视图来在代码中执行此操作。 – DBoyer 2015-02-24 20:27:21

回答

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 2015-02-24 20:58:00

+0

哎呦对不起错过了Swift部分:)很高兴我可以服务:) – DBoyer 2015-02-24 21:00:34

0

这在技术上是不是“推” - 当用户在你的tableview中选择一个小区,触发调用的tableview委托方法

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

...你应该在第二个表视图带来从屏幕的右侧。

你的每个tableview数据源和委托方法应该区分第一个和第二个tableview。下面是一个例子的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 2015-02-24 20:29:04

+0

是真的。轮到你发表回答:) – 2015-02-24 20:32:46

+0

好吧。我现在会这样做。 – DBoyer 2015-02-24 20:36:04

0

我认为你应该使用基本的UIView动画展现秒表从屏幕左侧的didSelectRowAtIndexPath方法移动第一个表