我有一个名为 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
↓
新的 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()
}
・・・・・・
}
最佳答案
您可以这样做,但是您必须在每个初始化程序中使用一些您通常不知道的默认值来初始化 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
中检查是否已设置。
顺便说一句:如果您遵循命名方案并像 View Controller 一样命名 XIB 文件,则可以使用隐式形式:
let twoController = TwoViewController.init()
或明确地
let twoController = TwoViewController.init(nibName: "TwoViewController", bundle: nil)
关于ios - 关于初始化 viewcontroller (swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41999258/