放置在UITableViewCell内时,MKMapView不显示位置

时间:2014-07-16 06:26:21

标签: ios objective-c uitableview mkmapview

以前,我在ViewController上有一个MKMapView,它会在给定位置显示一个Circle Overlay(由一个ViewController属性的对象提供)。我重构了VC,现在我已经把这个地图的代码放在了cellForRowAtIndexPath中(基本上用" self.mapView"在viewDidLoad中用" cell.mapView"在cellForRowAtIndexPath中)。

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

case 1: {

    static NSString *cellID = @"Cell2";
    mapTableViewCell *cell = [_tableView dequeueReusableCellWithIdentifier:cellID];

    if (cell == nil){
        cell = [[mapTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];
    }

    //    ITEM ON MAP
    double lat = [self.item.locationData[@"latitude"] doubleValue];
    double lng = [self.item.locationData[@"longitude"] doubleValue];
    cell.mapView.delegate = self;
    CLLocationCoordinate2D cord = CLLocationCoordinate2DMake(lat, lng);
    itemLocation = cord;
    MKCoordinateRegion startRegion = MKCoordinateRegionMakeWithDistance(cord, 1500, 1500);
    [cell.mapView setRegion:startRegion animated:YES];
    [cell.mapView addOverlay:[MKCircle circleWithCenterCoordinate:cord radius:200]];

    return cell;

}
    return cell;

}

通过上面的代码,我得到了整个美国的广角镜头,没有叠加。

我没有尝试显示用户的当前位置(虽然我只需勾选复选框即可在Interface Builder中执行此操作)。相反,我传入一组坐标,这些坐标与一个保存在Parse后端的对象(" self.item")一起存储。

我可以访问对象的所有其余属性,并且此代码之前有效(在如上所述的tableView之外),所以我认为这与tableViewCell本身有关。将MapView放在TableViewCell上有什么问题吗?

1 个答案:

答案 0 :(得分:2)

试试这个, 在自定义单元格中而不是在视图控制器中添加委托

@interface MapTableViewCell : UITableViewCell
<MKMapViewDelegate>

@property (weak, nonatomic) IBOutlet MKMapView *mapView;

@end

并将cellForRowAtIndexPath中的委托设置为单元格本身。

// In cellForRowAtIndexPath set the delegate like:
cell.mapView.delegate = cell;