斯威夫特3 |从他的名字或nib文件中获取Bundle

时间:2016-12-15 09:41:30

标签: ios swift3 bundle init nib

我正在开发一个动态应用程序,其中文件可以在不同的模块中。例如,我有一个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

0 个答案:

没有答案