来自Storyboard的子类ViewController
我在Storyboard中创建了ViewController,我正在使用它
instantiateViewControllerWithIdentifier:
加载它。 但我需要将此VC作为基类,并使用3-4个子类来更改其属性。
如何使用instantiateViewControllerWithIdentifier
获取我的子类的instantiateViewControllerWithIdentifier
?
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 }
您将不得不使用对象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对象。
只是施展它。
MyController *controller = (MyController *)[self.storyboard instantiateViewControllerWithIdentifier:@"myController"];
或斯威夫特:
let controller = storyboard?.instantiateViewControllerWithIdentifier("myController") as! MyController