2011-12-07 30 views
0

我有兩個類 - MapView和MapController。主要想法是使MVC模式中的View成爲共享對象。從NIB加載/創建GeoLocation的視圖 - IOS和MapKit

  1. 的MapView有IBOutlet中的MKMapView 「的MapView」 位於MapNib.xib
  2. MapController包含財產 「的MapView」 引用類的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 - 沒關係... 我可以看到地圖,但是藍色的poi nt反正也沒有顯示 ...爲什麼? 只有一種組合適合我 - 將NIB命名爲與控制器(MapController.xib)相同的方式,併爲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

IBOutlets不需要創建。 NIB創建它們並將它們分配給你的變量,通過分配和啓動一個新的mapview並將其保存到該變量來覆蓋它。

+0

它是有道理的,但我不明白我在哪裏初始化一個IBOutlet?我只分配我的自定義類稱爲「MapView」,它有IBOutlet,我不接觸...或者我錯了嗎?你的意思是說,如果我啓動我的班,這導致爲其IBOutlet分配內存呢? – Anonymous

相關問題