2017-02-02 6 views
1

У меня есть файл ViewController с именем TwoViewController.swift и файл с именем nib файл TwoViewController.xib.об инициализации viewcontroller (swift)

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")

Для этого, я думаю, мне нужно создать метод init в 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

вы должны инициализировать ваш TwoViewController из вашего пера файл, как это:

let twoController = TwoViewController.init(nibName: "TwoViewController", bundle: nil) 

, то вы можете инициализировать свои PAGETITLE так:

twoController.pageTitle = "2222" 

, то вы можете представить свою twoViewController, как это :

1

Вы можете сделать это, но тогда вам нужно будет инициализировать 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)