我在Storyboard中创建了ViewController,我正在使用
instantiateViewControllerWithIdentifier:
加载它。但我需要将此VC作为基类,并使用3-4个子类来更改其属性。
如何使用instantiateViewControllerWithIdentifier
获取子类的实例?
答案 0 :(得分:11)
Swift 3 中的@Bhagyesh版本:
class func instantiateFromSuperclassStoryboard() -> SubclassViewController {
let stroryboard = UIStoryboard(name: "Main", bundle: nil)
let controller = stroryboard.instantiateViewController(withIdentifier: "BaseViewController")
object_setClass(controller, SubclassViewController.self)
return controller as! SubclassViewController
}
答案 1 :(得分:4)
您必须使用对象c运行时。覆盖子类的init方法。使用'instantiateViewControllerWithIdentifier'创建一个BaseViewController对象。然后使用objc_setClass方法为创建的对象设置类。 以下代码将进入SubclassViewController.m。
- (instancetype)init {
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"main" bundle:[NSBundle mainBundle]];
UIViewController *baseClassViewController = [storyboard instantiateViewControllerWithIdentifier:@"baseClassIdentifier"];
object_setClass(baseClassViewController, [SubclassViewController class]);
return (SubclassViewController *)baseClassViewController;
}
在此之后,您可以使用简单的[[SubclassViewController alloc] init]创建SubclassViewController对象。
答案 2 :(得分:-1)
投下它。
MyController *controller = (MyController *)[self.storyboard instantiateViewControllerWithIdentifier:@"myController"];
或斯威夫特:
let controller = storyboard?.instantiateViewControllerWithIdentifier("myController") as! MyController