【问题标题】:Load UIViewController from the separate nib file in swift?快速从单独的 nib 文件加载 UIViewController?
【发布时间】:2015-01-21 19:46:23
【问题描述】:

我拿了一个带有单独 nib 文件的 ViewController。我的初始根视图控制器设置在情节提要中。现在的问题是,当我推送到这个控制器时,没有调用 View hireachy 方法( ViewDidLoad , ViewWillApper 等)..

代码(视图已加载但方法未调用)

var viewController = UIViewController(nibName: "OfferDetailViewController", bundle: nil) as OfferDetailViewController
 self.navigationController?.pushViewController(viewController, animated: true);

如果我对故事板做同样的事情,它的工作正常。

    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    var viewController = mainStoryboard.instantiateViewControllerWithIdentifier("offer") as OfferDetailViewController     
   self.navigationController?.pushViewController(viewController, animated: true);

问题:使用故事板视图层次结构方法正在调用但不是使用单独的 nib 文件?

【问题讨论】:

    标签: ios objective-c iphone swift uiviewcontroller


    【解决方案1】:
    var viewController = OfferDetailViewController(nibName: "OfferDetailViewController", bundle: nil)
    

    【讨论】:

    • @SidShah 这是我在您的代码中发现的明显问题。您需要初始化 OfferDetailViewController 而不是 UIViewController。在解决问题之前,您可能需要先解决此问题
    • 在我的情况下,这需要 1.5 秒才能加载,这个问题有什么解决方案吗?谢谢
    • 有什么方法可以从 Xib 推送到 UIViewController 吗?
    【解决方案2】:

    这是一个很好的通用方法...

    extension UIViewController {
        class func loadFromNib<T: UIViewController>() -> T {
             return T(nibName: String(describing: self), bundle: nil)
        }
    }
    
    let vc : OfferDetailViewController = OfferDetailViewController.loadFromNib()
    

    【讨论】:

    • 无法编译。将 className() 更改为“String(描述:self)”
    • @AaronBratcher 谢谢。我从我的项目中写了另一个扩展。更新了。
    【解决方案3】:

    类型转换的解决方案:

    extension UIViewController {
        static func initFromNib() -> Self {
            func instanceFromNib<T: UIViewController>() -> T {
                return T(nibName: String(describing: self), bundle: nil)
            }
            return instanceFromNib()
        }
    }
    

    享受:

    let testVC = TestVC.initFromNib()
    testVC.someCustomParam = "someValue"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-26
      • 2013-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多