我正在尝试模拟两个视图控制器之间的 iOS 联系人。
我有一个简单的Person
课程:
class Person {
var name = ""
}
和 aUIViewController
包含一个 的数组Person
,该数组嵌入在 a 中UINavigationController
:
class PeopleViewController: UIViewController {
var people = [Person]()
var selectedPerson: Person?
switch segueIdentifier(for: segue) {
case .showPerson:
guard let vc = segue.destination as? PersonViewController else { fatalError("!") }
vc.person = selectedPerson
}
}
此控制器使用Show seguePersonViewController
来显示selectedPerson
:
class PersonViewController: UIViewController {
var person: Person!
}
PeopleViewController
也可以Person
在数组中添加一个新的Person
。以模态NewPersonViewController
方式呈现,但是:
class NewPersonViewController: UIViewController {
var person: Person?
}
如果Person
添加了新的,我想NewPersonViewController
关闭但在导航堆栈的一部分中显示新Person
的。PersonViewController
我最好的猜测是:
extension NewPersonViewController {
func addNewPerson() {
weak var pvc = self.presentingViewController as! UINavigationController
if let cvc = pvc?.childViewControllers.first as? PeopleViewController {
self.dismiss(animated: false, completion: {
cvc.selectedPerson = self.person
cvc.performSegue(withIdentifier: .showPerson, sender: nil)
}
}
}
}
但是,(1)我不太高兴UINavigationController
像我预期self.presentingViewController
的那样强迫沮丧PeopleViewController
?并且(2),闭包中是否存在内存泄漏,正如我使用weak var pvc = self.presentingViewController
的pvc
但不是cvc
?或者,最后(3)有没有更好的方法来做到这一点?
非常感谢您的任何帮助、建议等。