我有4个子类UIViewController,名为AViewController,BViewController,CViewController,DViewController。
现在在工具栏中,单击A,内容视图显示AViewController的视图,等等。
我是一个懒惰的人,讨厌写4次“alloc”initwithnibname“代码,所以我写了下面的代码来代码创建它们。
- (void)addChildView:(UIViewController *)childViewController className:(NSString *)viewClassName{
if (childViewController != nil) {
// add view
[self.contentView addSubview:childViewController.view];
}else
{
// init.
Class v = NSClassFromString(viewClassName);
UIViewController *childViewControllerNew = nil;
childViewControllerNew = [[v alloc] initWithNibName:viewClassName bundle:nil];
[self.contentView addSubview:childViewController.view];
}}
但是这不会创建任何ViewController,在调试时总是返回nil。
你能告诉我这是什么问题吗?我可以通过这种方法创建子类UIViewController吗?
提前致谢!
答案 0 :(得分:1)
问题是你正在创建一个视图控制器,但是你没有做任何事情。有两个问题:
[self.contentView addSubview:childViewController.view];
)childViewControllerNew
您应该将最后一段代码更改为:
Class v = NSClassFromString(viewClassName);
UIViewController *childViewControllerNew = nil;
childViewControllerNew = [[v alloc] initWithNibName:viewClassName bundle:nil];
[self.contentView addSubview:childViewControllerNew.view];
[self addChildViewController:childViewControllerNew];
答案 1 :(得分:1)
如果你真的很懒,你可以声明像
这样的枚举值typedef NS_ENUM (NSInteger, VC) {
VCa,
VCb,
VCc,
VCd
};
然后在你的
中- (void)addChildView:(UIViewController *)childViewController className:(VC)typeOfVC {
switch(typeOfVC)
case VCa: ViewControllerA *vc = [ViewControllerA alloc] initwithNibName@"YourNibName"]
[self.contentView addSubview:vc.view];
case: VCb : same with B
etc
etc
}
另外,您可以在其他类中使用这些情况来区分ViewControllers ...