以编程方式更改NIB复选框

时间:2011-11-28 21:32:40

标签: ios xcode

我正在尝试以编程方式设置我的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;

}

1 个答案:

答案 0 :(得分:1)

self.mapView = [[MKMapView alloc] init];

在这里,您正在销毁插座中的值,并将其替换为新的mapview,这将永远不会显示。

从笔尖加载时,出口将填充您在笔尖中链接到它们的对象。删除这一行,你应该没事。

编辑 - 刚刚意识到此代码的执行位置。插件尚未填充 - 您需要在viewDidLoad中设置属性,而不是在重写的初始化程序中 - 事实上,所有代码都可以更好地放在viewDidLoad中。