2

我正在尝试构建一个 iOS 5 应用程序,其中的地图填充了用户位置周围的点。地图嵌套在导航控制器中,底部有一个搜索栏。搜索栏连接到搜索栏下方的 UITableView(用于搜索结果)。所有这三个视图都在 UIScrollView 中。

层次结构如下:

  • 导航控制器
    • 用户界面视图
      • 滚动视图(包含以下3个)
        • 地图视图
        • 搜索栏
        • 表视图

对于无法发布图片,我深表歉意,但我可以将您引导至另一个执行几乎完全相同的操作的应用程序,即Dark Sky

这就是我想要发生的事情:当用户在搜索栏中点击时,视图会向上滚动,显示带有结果的表格视图(同时也显示取消按钮)。搜索并找到某些内容或取消后,视图将向下滑动以再次显示地图(底部有搜索栏)。这与Dark Sky完美结合。

我已经看到其他一些可以解决我的问题的问题,但是,它们都没有完全说明解决方案。关于如何实现这一点的任何最佳实践?

4

3 回答 3

0

你几乎肯定不想在UIScrollView这里。仅当您希望用户控制滚动时才使用它。

您可以使用现有的UISearchDisplayController功能,如TableSearch示例中所示。请注意,虽然该示例中的背景视图是UITableView,但这不是用于显示搜索结果的示例表。如果您更改背景表格的样式,您可以看到这一点。因此,您也可以使用 anMKMapView作为背景,并且仍然有一个搜索结果表。

如果 UISearchDisplayController 提供的过渡行为不适合,您将需要自己创建搜索结果表并为其设置动画。在您的界面设计中,将搜索结果表放在屏幕下方的视线之外。当用户搜索时,使用UIView animateWithDuration:animations:将表格移动到正确的位置。(只需使表格框架与地图框架具有相同的值。)

如果您允许旋转到不同的设备方向,您可能需要在旋转发生时更新表格位置。

于 2012-08-28T00:06:13.403 回答
0

当用户完成输入搜索文本时,您不能手动设置滚动视图的内容偏移量吗?

按地图视图的负高度偏移滚动视图。

myScrollView.contentOffset = CGSizeMake(0, -heightOfMapView);

或者使用 CGAffineTransformMakeTranslation

myScrollView.transform = CGAffineTransformMakeTranslation(0, -heightOfMap);

然后,当您想要返回地图时,请使用重置转换转换:

myScrollView.transform = CGAffineTransformMakeTranslation(0, 0);
于 2012-08-28T01:14:47.723 回答
0

只是一个想法:每个 TableView 都有一个属性 tableHeaderview:

@property(nonatomic, retain) UIView *tableHeaderView

searchBar和 放在mapView里面tableHeaderView。因此,您将tableHeaderView用作容器视图并相应地滚动tableView,因此它只显示tableHeaderView.

于 2012-08-28T07:03:31.253 回答