使用相同的数据源在UITableView和MapView之间切换

时间:2014-11-18 05:45:57

标签: ios objective-c xcode

好的,所以这里......我正在开展一个项目,用户从搜索屏幕开始,输入一些标准。当他们提交搜索时,会在UINavigationController中推送UITableViewController,并显示搜索结果。搜索结果中的所有这些项都有纬度/经度,因此我们希望为用户提供在地图中显示结果的选项。

我们想要的是能够在列表和地图视图之间来回切换而不向导航控制器堆栈添加任何新内容......这意味着,如果他们切换到地图视图然后点击后退箭头,他们希望用户返回搜索屏幕。另一件事是,当在列表和地图视图之间切换时,他们想要一个水平翻转效果,因此用户可以清楚地知道他们没有推进导航堆栈。

所以我的问题是我无法弄清楚如何让这一切都在一起工作。我最接近的是在列表和地图之间切换,基本上是在导航控制器堆栈中使用VC的数组并用新的(地图)替换最后一个(列表),反之亦然...但这似乎笨重但不提供我能找到的任何动画过渡效果。

有什么想法吗?我可能过于复杂了,但我已经被困在这几天了,真的需要一些帮助。

1 个答案:

答案 0 :(得分:0)

你可以通过使用一个视图来轻松实现这一点,不需要使用单独的视图控制器,因为你需要一个视图控制器而不是tableviewcontroller,例如在tableview的顶部看到图像,所以让我们这样做,在视图控制器中包含tableview,添加一个单独的视图,其中包含地图视图和后退按钮,如下图所示

enter image description here

View-MapView中的

应位于tableview之上。在上面的例子中,我添加了一个后退按钮,aMapView作为标签,所以你可以用地图视图替换它。按钮动作在包含tableview的同一视图控制器中处理

由此你没有向导航控制器的堆栈添加任何新东西

在编码部分你可以使用如下,我采用tableview的单元格选择方法通过翻转效果显示这个地图视图

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
 {
    //set map views co-ordinates
    //perform animation 
    [UIView transitionWithView:self.view duration:0.6 options:UIViewAnimationOptionTransitionFlipFromRight animations:^{
      [self.view insertSubview:self.mapView aboveSubview:self.aTableView]; //hear self.mapView is container view for botton and map view similar to `View-MapView` in the above image
    } completion:^(BOOL finished) {

   }];
}

 - (IBAction)backButtonAction:(id)sender {
   [UIView transitionWithView:self.view duration:0.6 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{
      [self.view insertSubview:self.aTableView aboveSubview:self.mapView];
   } completion:^(BOOL finished) {

   }];
}