Init personalizado para UIViewController no Swift com configuração de interface no storyboard
Estou tendo problemas para escrever init personalizado para a subclasse de UIViewController, basicamente quero passar a dependência pelo método init para viewController em vez de definir propriedades diretamente comoviewControllerB.property = value
Então, criei um init personalizado para o meu viewController e chamei o init super designado
init(meme: Meme?) {
self.meme = meme
super.init(nibName: nil, bundle: nil)
}
A interface do controlador de exibição reside no storyboard; também fiz a interface da classe personalizada como meu controlador de exibição. E o Swift precisa chamar esse método init, mesmo que você não esteja fazendo nada dentro desse método. Caso contrário, o compilador irá reclamar ...
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
O problema é quando tento chamar meu init personalizado comMyViewController(meme: meme)
ele não inicia propriedades no meu viewController ...
Eu estava tentando depurar, encontrei no meu viewController,init(coder aDecoder: NSCoder)
é chamado primeiro, então meu init personalizado é chamado mais tarde. No entanto, esses dois métodos init retornam diferentesself
endereços de memória.
Estou suspeitando de algo errado com o init para o meu viewController, e ele sempre retornaráself
com oinit?(coder aDecoder: NSCoder)
, que não possui implementação.
Alguém sabe como criar init personalizado para o seu viewController corretamente? Nota: a interface do meu viewController está configurada no storyboard
Aqui está o meu código viewController:
class MemeDetailVC : UIViewController {
var meme : Meme!
@IBOutlet weak var editedImage: UIImageView!
// TODO: incorrect init
init(meme: Meme?) {
self.meme = meme
super.init(nibName: nil, bundle: nil)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override func viewDidLoad() {
/// setup nav title
title = "Detail Meme"
super.viewDidLoad()
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
editedImage = UIImageView(image: meme.editedImage)
}
}