的UITableView赛格瑞
我有一个包含一个UIViewController两个,一张地图和一个的tableView连接在一起,它看起来是这样的:的UITableView赛格瑞
而且我希望能够将tableView推送到同一个视图控制器内的另一个tableView,以便地图保持它在哪里。当然,我希望能够通过一个会出现在左上角的navbaritem中的按钮以编程方式向后退开segue。
类似的行为可以在放置在popover中的iPad tableView控制器中观察到。我将如何去在Swift(iOS 8)中执行此操作?
任何代码片段或指向现有代码示例的指针都非常感谢。
可以实现视图控制器遏制像这样:
- (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”)到你的主视图控制器,这样你就可以将一个新表“推送”到堆栈上。
干杯,队友。尽管事实上我想在Swift中使用它,但我得到了你的逻辑:) – kernelpanic 2015-02-24 20:58:00
哎呦对不起错过了Swift部分:)很高兴我可以服务:) – DBoyer 2015-02-24 21:00:34
这在技术上是不是“推” - 当用户在你的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;
}
我认为你应该使用基本的UIView动画展现秒表从屏幕左侧的didSelectRowAtIndexPath方法移动第一个表
对于这种类型的情况下,你可以使用视图控制器遏制。在故事板中,您可以将“容器视图”对象拖入空间并添加导航控制器,然后您可以执行常规导航控制器。您还可以通过简单地将navigationController视图添加为子视图来在代码中执行此操作。 – DBoyer 2015-02-24 20:27:21