我有一个表格视图,其中包含从sqlite检索的地图标题(纬度和经度值也存储)。
点击每个标题时,我希望在下一个视图中显示带有该标题的地图。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
{
static NSString *CellIdentifier = @"Cell1";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
MapColumns *mc=(MapColumns *)[appDelegate.outputArray objectAtIndex:indexPath.row];
cell.textLabel.text=mc.Title;
cell.accessoryType=UITableViewCellAccessoryDetailDisclosureButton;
return cell;
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
MapView *mv=[[MapView alloc]initWithNibName:@"MapView" bundle:nil];
[self.navigationController pushViewController:mv animated:YES];
}
答案 0 :(得分:1)
在设置地图标题方面,您可以在title
中实例化MapView视图控制器时设置didSelectRowAtIndexPath:
属性。通过再次访问appDelegate的outputArray获取标题的价值,就像在cellForRowAtIndexPath:
中一样。
您还需要一种方法将MapColumns对象传递给MapView视图控制器类。为此,请在MapView类上创建一个属性,并在调用pushViewController:
之前将MapView对象分配给该属性
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
MapView *mv = [[MapView alloc]initWithNibName:@"MapView" bundle:nil];
MapColumns *mc = (MapColumns *)[appDelegate.outputArray objectAtIndex:indexPath.row];
mv.title = mc.Title;
mv.mapColumns = mc; // set this property here you you can access the MapColumns object in your MapView view controller
[self.navigationController pushViewController:mv animated:YES];
}
然后在MapView的viewDidLoad
方法中,使用您设置的mapColumns
属性的值来检索纬度和经度并适当地配置地图。
如果您不知道如何设置地图并显示注释,则应首先阅读Apple的Location Awareness Programming Guide。
可以找到另一个有用的MapKit教程here。