从NIB为GeoLocation加载/创建视图 - IOS和MapKit

时间:2011-12-07 00:53:54

标签: ios model-view-controller geolocation mapkit

我有两个类 - MapView和MapController。主要思想是使View成为MVC模式中的共享对象。

  1. MapView为位于MapNib.xib
  2. 中的MKMapView提供了IBOutlet“mapView”
  3. MapController包含引用类MapView
  4. 的属性“mapView”

    然后我尝试从控制器设置MKMapView的一些属性,无论如何它都没有对此作出反应。例如,我在MapController中尝试:

    self.mapView.mapView.showUserLocation = YES; // does not show blue point ...
    

    MapView类:

    @interface MapView : UIViewController
    
    @property (nonatomic, retain) IBOutlet MKMapView *mapView;
    
    ...
    
    //UINib *view = [UINib nibWithNibName:@"MapView" bundle:nil];
    //[view instantiateWithOwner:self options:nil];
    
    @end
    

    MapController类:

    @interface MapController : UIViewController<
        CLLocationManagerDelegate, 
        MKMapViewDelegate> 
    
    @property (nonatomic, retain) MapModel *mapModel;
    @property (nonatomic, retain) MapView *mapView;
    
    ...
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
    
        self.mapView = [[[MapView alloc] init] autorelease];
        self.mapView.mapView.showsUserLocation = YES;
    
    } @end
    

    我试图让MapView成为UIView,UINib,UIViewcontroller的子类,尝试使用UINib :: nibWithNibName,UIViewController :: initWithNibName,UIViewController :: loadNibNamed直接加载NIB - 没关系... 我可以看到地图但是无论如何都没有显示蓝点 ...为什么??? 只有一个组合适用于我 - 以与控制器(MapController.xib)相同的方式命名NIB,并将MKMapView的插座添加为控制器属性... 似乎无法在一个类中加载NIB / View并使用它在另一个,我是对的吗?

    不知怎的,这很好用:

    @interface MapController : UIViewController
    
    @property (nonatomic, retain) IBOutlet MKMapView *mapView;  // NIB was renamed to MapController.xib
    
    ...
    
    @end
    

    然后在控制器中:

    self.mapView.showUserLocation = YES; // now this shows blue dot ... why???
    

    谢谢,艺术

1 个答案:

答案 0 :(得分:1)

不需要创建IBOutlets。 NIB创建它们并将它们分配给您的vars,您将通过分配和启动新的mapview并将其保存到该变量来覆盖它