2015-02-24 81 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方法移動第一個表