在表视图中单击行时,在下一个视图中显示具有该标题的地图

时间:2012-08-31 19:51:46

标签: ios uitableview mkmapview

我有一个表格视图,其中包含从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];
}

1 个答案:

答案 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