我正在尝试模拟两个视图控制器之间的 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)有没有更好的方法来做到这一点?
非常感谢您的任何帮助、建议等。