我有一个名为TwoViewController.swift
的ViewController文件和一个名为TwoViewController.xib
的nib文件。
TwoViewController.swift
喜欢这个↓
class TwoViewController: UIViewController {
var pageTitle: String?
・・・・・・
override func viewDidLoad() {
super.viewDidLoad()
}
・・・・・・
}
然后,我会新建一个TwoViewController并将其呈现在OneViewController.swift
这样的↓
class OneViewController: UIViewController {
・・・・・・
override func viewDidLoad() {
super.viewDidLoad()
}
・・・・・・
func presentTwo() {
let two = new TwoViewController()
two.pageTitle = "2222"
self.present(two, animated: false, completion: nil)
}
}
但是,我希望new TwoViewController
并同时将值设置为属性pageTitle
↓
new TwoViewController(pageTitle: "22222")
要做到这一点,我想我需要在TwoViewController上创建一个init方法。 我尝试制作如下↓的初始化方法。它是否正确?
class TwoViewController: UIViewController {
var pageTitle: String
init(pageTitle: String) {
super.init(nibName: nil, bundle: nil)
self.pageTitle = pageTitle
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override func viewDidLoad() {
super.viewDidLoad()
}
・・・・・・
}
答案 0 :(得分:2)
你可以这样做,但是你必须在每个初始化程序中用一些默认值初始化pageTitle
,这通常是你不知道的。
因此,这并不常见。而是在初始化后分配属性值,就像您最初一样(在funcTwo
中),并继续viewDidLoad
中的处理:
class TwoViewController: UIViewController {
var pageTitle: String!
override func viewDidLoad() {
// use pageTitle to fill some outlet or so:
self.title = pageTitle
}
}
或使pageTitle
成为可选项,并在viewDidLoad
中设置,如果已设置,则会签入。
顺便说一下:如果您遵循命名方案并将您的XIB文件命名为视图控制器,则可以使用隐式格式:
let twoController = TwoViewController.init()
或明确
let twoController = TwoViewController.init(nibName: "TwoViewController", bundle: nil)
答案 1 :(得分:0)
你应该从你的nib文件中初始化你的TwoViewController,如下所示:
let twoController = TwoViewController.init(nibName: "TwoViewController", bundle: nil)
然后你可以像这样初始化你的pageTitle:
twoController.pageTitle = "2222"
然后你可以像这样展示你的twoViewController:
self.present(twoController, animated: false, completion: nil)