我正在开发一个动态应用程序,其中文件可以在不同的模块中。例如,我有一个Bundle“MODNews”和一个Bundle“MODSpecific”,我可以在Bundle“MODNews”中使用ViewController文件,在Bundle“MODSpecific”中使用Nib文件。
要获取ViewController的包,我可以这样做:
let bundle = Bundle.init(for: NSClassFromString("MODNews.MyClass")!)
但是对于Nib来说,我找不到一种方法来获取它,因为nib需要对bundle进行初始化我认为这是不可能的但也许有办法吗?
在最后一个选项中,我在这里有“MODSpecific”的Bundle名称,是否也可以使用此信息初始化Bundle?
我使用的是Swift3,但是如果你在以前的版本或Objective-C中有解决方案,我会接受它;)
这就是我现在所拥有的:
public static func getViewControllerForName (module: String, controller: String) -> UIViewController {
let controllerString: String = Utils.getController(moduleString: module, controllerString: controller)
let view: (Bundle, String) = Utils.getView(viewString: controller)
let viewClass = NSClassFromString(controllerString) as! UIViewController.Type
let viewController = viewClass.init(nibName: view.string, bundle: view.bundle) //Here I need the bundle from the viewClass found
return viewController
}
static func getController (moduleString: String, controllerString: String) -> String {
// Check if a specific controller exists
let specificControllerString: String = specificAppName + "." + Constants.specificString + controllerString
if (NSClassFromString(specificControllerString) != nil) {
// A specific controller exists, we get it
return specificControllerString
}
else {
// No specific found, we get the module controller
return moduleString + "." + controllerString
}
}
static func getView (viewString: String) -> (Bundle, String) {
// For Xib we do not need module !
// Here I need something to get the bundle for current viewName, for example : getBundle(forResource: viewString, ofType: "nil")
return (Bundle, String)
}
TY