Ios 点击与其关联的表行时,如何选择映射接点?

Ios 点击与其关联的表行时,如何选择映射接点?,ios,objective-c,parse-platform,mkmapview,tableview,Ios,Objective C,Parse Platform,Mkmapview,Tableview,这里我有两种观点: WallViewController TableViewController WallViewController包含MKMapView,TableViewController是PFQueryTableViewController的子类,显示与WallViewController上的注释pin关联的内容行。TableViewController作为WallViewController中的子视图添加,因此这两个视图一起显示。现在,当我点击地图上的注释插脚时,TableVie

这里我有两种观点:

  • WallViewController
  • TableViewController
WallViewController包含MKMapView,TableViewController是PFQueryTableViewController的子类,显示与WallViewController上的注释pin关联的内容行。TableViewController作为WallViewController中的子视图添加,因此这两个视图一起显示。现在,当我点击地图上的注释插脚时,TableViewController中的tableview将滚动到与成功选择的注释插脚关联的行但我想做的是也有一个相反的动作,因此当我点击一行时,将选择与该行关联的注释pin,并显示其标注。

以下我提供了相关代码:

WallViewController.h

但它似乎不起作用。这里一定有什么不对劲,但我不知道是什么

在这里,我在点击表的第一行时提供了日志输出:

2015-01-28 11:24:31.886 Test[8097:60b] tap row --> 0
2015-01-28 11:24:31.888 Test[8097:60b] annotation count --> 40
2015-01-28 11:24:31.890 Test[8097:60b] textlabel at the table row tapped --> Asddsdtest
2015-01-28 11:24:31.890 Test[8097:60b] text retrieved from PAWPost --> ...(40 texts here)
2015-01-28 11:24:31.897 Test[8097:60b] found matching at 0
2015-01-28 11:24:31.899 Test[8097:60b] wallViewController --> (null)
2015-01-28 11:24:31.900 Test[8097:60b] wallViewController mapView --> (null)
我发现了,但答案和评论似乎没有为像我这样的初学者提供足够的细节

添加的附加信息

PAWPost.h


您可以作为支持MSAnnotation协议的对象进行注释。 因此,当您选择单元格时,您将确切地知道此操作背后的对象。 在这种情况下,您-您的注释将恰好是您通过点击UITableViewCell选择的对象

所以-您的对象PAWPost应该只支持MKAnnotation协议:

@interface PAWPost : NSObject <MKAnnotation> 
// Interface here
@end

@implementation PAWPost
// ...
- (CLLocationCoordinate2D)coordinate {
    return <#your coordinate here#>;
}
// ...
@end
@接口PAWPost:NSObject
//这里的接口
@结束
@实施后
// ...
-(CLLocationCoordinate2D)坐标{
返回;
}
// ...
@结束
附言。 您不需要在didSelectRowatingIndexPath:方法中创建WallViewController类的新本地实例。 因为那时您的WallViewController将没有MapView。
相反,在之前创建WallViewController实例并使用指向它的指针。

您可以作为支持MSAnnotation协议的对象进行注释。 因此,当您选择单元格时,您将确切地知道此操作背后的对象。 在这种情况下,您-您的注释将恰好是您通过点击UITableViewCell选择的对象

所以-您的对象PAWPost应该只支持MKAnnotation协议:

@interface PAWPost : NSObject <MKAnnotation> 
// Interface here
@end

@implementation PAWPost
// ...
- (CLLocationCoordinate2D)coordinate {
    return <#your coordinate here#>;
}
// ...
@end
@接口PAWPost:NSObject
//这里的接口
@结束
@实施后
// ...
-(CLLocationCoordinate2D)坐标{
返回;
}
// ...
@结束
附言。 您不需要在didSelectRowatingIndexPath:方法中创建WallViewController类的新本地实例。 因为那时您的WallViewController将没有MapView。
相反,在之前创建WallViewController实例并使用指向它的指针。

您可以作为支持MSAnnotation协议的对象进行注释。 因此,当您选择单元格时,您将确切地知道此操作背后的对象。 在这种情况下,您-您的注释将恰好是您通过点击UITableViewCell选择的对象

所以-您的对象PAWPost应该只支持MKAnnotation协议:

@interface PAWPost : NSObject <MKAnnotation> 
// Interface here
@end

@implementation PAWPost
// ...
- (CLLocationCoordinate2D)coordinate {
    return <#your coordinate here#>;
}
// ...
@end
@接口PAWPost:NSObject
//这里的接口
@结束
@实施后
// ...
-(CLLocationCoordinate2D)坐标{
返回;
}
// ...
@结束
附言。 您不需要在didSelectRowatingIndexPath:方法中创建WallViewController类的新本地实例。 因为那时您的WallViewController将没有MapView。
相反,在之前创建WallViewController实例并使用指向它的指针。

您可以作为支持MSAnnotation协议的对象进行注释。 因此,当您选择单元格时,您将确切地知道此操作背后的对象。 在这种情况下,您-您的注释将恰好是您通过点击UITableViewCell选择的对象

所以-您的对象PAWPost应该只支持MKAnnotation协议:

@interface PAWPost : NSObject <MKAnnotation> 
// Interface here
@end

@implementation PAWPost
// ...
- (CLLocationCoordinate2D)coordinate {
    return <#your coordinate here#>;
}
// ...
@end
@接口PAWPost:NSObject
//这里的接口
@结束
@实施后
// ...
-(CLLocationCoordinate2D)坐标{
返回;
}
// ...
@结束
附言。 您不需要在didSelectRowatingIndexPath:方法中创建WallViewController类的新本地实例。 因为那时您的WallViewController将没有MapView。
相反,在之前创建WallViewController实例并使用指向它的指针。

您可以使用PFObject.objectId查找所需的注释

PFObject *selectedObject = [self.objects objectAtIndex:i];

for (id annotation in wallViewController.mapView.annotations)
{
    if ([annotation isKindOfClass:[PAWPost class]])
    {
        PAWPost *post = (PAWPost*)annotation;
        if ([post.object.objectId isEqualToString:selectedObject.objectId])
        {
            [wallViewController.mapView selectAnnotation:annotation  animated:YES];
            break;
        }
    }
}

可以使用PFObject.objectId查找所需的注释

PFObject *selectedObject = [self.objects objectAtIndex:i];

for (id annotation in wallViewController.mapView.annotations)
{
    if ([annotation isKindOfClass:[PAWPost class]])
    {
        PAWPost *post = (PAWPost*)annotation;
        if ([post.object.objectId isEqualToString:selectedObject.objectId])
        {
            [wallViewController.mapView selectAnnotation:annotation  animated:YES];
            break;
        }
    }
}

可以使用PFObject.objectId查找所需的注释

PFObject *selectedObject = [self.objects objectAtIndex:i];

for (id annotation in wallViewController.mapView.annotations)
{
    if ([annotation isKindOfClass:[PAWPost class]])
    {
        PAWPost *post = (PAWPost*)annotation;
        if ([post.object.objectId isEqualToString:selectedObject.objectId])
        {
            [wallViewController.mapView selectAnnotation:annotation  animated:YES];
            break;
        }
    }
}

可以使用PFObject.objectId查找所需的注释

PFObject *selectedObject = [self.objects objectAtIndex:i];

for (id annotation in wallViewController.mapView.annotations)
{
    if ([annotation isKindOfClass:[PAWPost class]])
    {
        PAWPost *post = (PAWPost*)annotation;
        if ([post.object.objectId isEqualToString:selectedObject.objectId])
        {
            [wallViewController.mapView selectAnnotation:annotation  animated:YES];
            break;
        }
    }
}


非常感谢@WinDMak3r。如果你不介意的话,你能把你的答案也写进代码里吗?这样我就能更好地理解了?很抱歉要求,但我是一个初学者,最好是尝试从例子中学习?请容忍我,我还是不明白。我应该如何处理您的代码?将其与PAWPost类一起使用以支持注释。当您在tableView中选择cell时,您将使用indexPath.row从数组中获取此对象,然后在selectAnnotation:method中使用它。不好意思说,我仍然无法获取它,但我永远不会放弃。当然,我必须让自己充分了解协议的内容。顺便说一句,我已经添加了PAWPost类的详细信息。最初,我做了类似于[wallViewController.mapView selectAnnotation:[wallViewController.mapView annotations]objectAtIndex:indexPath.row]动画:是];。但我知道这行不通。我只是不知道如何将注释链接到indexPath.row。如果您编辑我的代码来实现这一点,那将非常有帮助。在tableViewController中,您需要添加另一个属性,并将其与现有的MapViewController连接。之后,您可以轻松地执行类似操作:
[wallViewController.mapView selectAnnotation:self.objects[indexPath.row]动画:YES]PFObject *selectedObject = [self.objects objectAtIndex:i];

for (id annotation in wallViewController.mapView.annotations)
{
    if ([annotation isKindOfClass:[PAWPost class]])
    {
        PAWPost *post = (PAWPost*)annotation;
        if ([post.object.objectId isEqualToString:selectedObject.objectId])
        {
            [wallViewController.mapView selectAnnotation:annotation  animated:YES];
            break;
        }
    }
}