我正在尝试以编程方式设置我的nib属性。具体来说,我有一个用nib初始化的视图控制器,现在我正在尝试以编程方式[mapView setMapType:MKMapTypeHybrid],但它从未设置它。
我的mapView是一个IBOutlet MKMapView,我将一个Map View拖到我的nib中,并将mapView连接到Map View。
如果我在Map View的Attributes Inspector中设置Type,它可以正常工作。有没有办法以编程方式执行此操作?
几个月前我放弃了尝试使用笔尖(在我开始使用XCode之后不久),但是想出这个很好。 感谢
MapTabViewController.h
#import <MapKit/MapKit.h>
@interface MapTabViewController : UIViewController <MKMapViewDelegate>
@property (nonatomic, strong) IBOutlet MKMapView *mapView;
MapTabViewController.m
-(id) initWithTabBarAndNibName: (NSString *) nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
self.title = MAPTAB_TITLE;
self.tabBarItem.image = [UIImage imageNamed:MAPTAB_ICON];
self.mapView = [[MKMapView alloc] init];
[self.mapView setMapType:MKMapTypeHybrid];
}
return self;
}
AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.dataModel = [[DataModel alloc] init];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
tabBarController = [[UITabBarController alloc] init];
vc_tacTab = [[TacTabViewController alloc] initWithTabBarAndNibName:@"TacTabViewController" bundle: nil];
vc_tacTab.dataModel = self.dataModel;
vc_mapTab = [[MapTabViewController alloc] initWithTabBarAndNibName:@"MapTabViewController" bundle:nil];
vc_mapTab.dataModel = self.dataModel;
NSArray *localControllersArray = [[NSArray alloc] initWithObjects:vc_tacTab, vc_mapTab, nil];
tabBarController.viewControllers = localControllersArray;
[self.window addSubview:tabBarController.view];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
答案 0 :(得分:1)
self.mapView = [[MKMapView alloc] init];
在这里,您正在销毁插座中的值,并将其替换为新的mapview,这将永远不会显示。
从笔尖加载时,出口将填充您在笔尖中链接到它们的对象。删除这一行,你应该没事。
编辑 - 刚刚意识到此代码的执行位置。插件尚未填充 - 您需要在viewDidLoad中设置属性,而不是在重写的初始化程序中 - 事实上,所有代码都可以更好地放在viewDidLoad中。