从 NIB 为 GeoLocation 加载/创建视图 - IOS 和 MapKit
Posted
技术标签:
【中文标题】从 NIB 为 GeoLocation 加载/创建视图 - IOS 和 MapKit【英文标题】:Loading / creating views from NIB for GeoLocation - IOS and MapKit 【发布时间】:2011-12-07 00:53:53 【问题描述】:我有两个类 - MapView 和 MapController。主要思想是使 View 成为 MVC 模式中的共享对象。
-
MapView 的 IBOutlet “mapView” 用于位于 MapNib.xib 中的 MKMapView
MapController 包含引用类 MapView 的属性“mapView”
然后我尝试从控制器设置 MKMapView 的一些属性,但无论如何它都不会对此做出反应。例如我在 MapController 中尝试:
self.mapView.mapView.showUserLocation = YES; // does not show blue point ...
地图视图类:
@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】:不需要创建 IBOutlets。 NIB 创建它们并将它们分配给您的变量,您正在通过分配和初始化一个新的地图视图并将其保存到该变量来覆盖它
【讨论】:
这是有道理的......虽然我不明白我到底在哪里初始化了一个 IBOutlet?我只分配名为“MapView”的自定义类,它有 IBOutlet,我不碰……还是我错了?你的意思是,如果我初始化我的类,这也会导致为其 IBOutlet 分配内存?以上是关于从 NIB 为 GeoLocation 加载/创建视图 - IOS 和 MapKit的主要内容,如果未能解决你的问题,请参考以下文章
从 xib 加载 UITableViewCell 会导致加载 nib 但未设置视图出口
从框架加载 nib 文件时出现 NSInternalInconsistencyException