以前,我在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上有什么问题吗?
答案 0 :(得分:2)
试试这个, 在自定义单元格中而不是在视图控制器中添加委托
@interface MapTableViewCell : UITableViewCell
<MKMapViewDelegate>
@property (weak, nonatomic) IBOutlet MKMapView *mapView;
@end
并将cellForRowAtIndexPath中的委托设置为单元格本身。
// In cellForRowAtIndexPath set the delegate like:
cell.mapView.delegate = cell;