【发布时间】:2015-10-04 04:27:44
【问题描述】:
我在 Swift 中使用主从模型。 但是,我想将在详细视图中创建的类对象发送回主视图。我在主视图中编写了一个展开函数,但在详细视图中看不到后退按钮,因此无法按 ctrl+将其拖到出口。
有谁知道如何设置后退按钮使其可见?
【问题讨论】:
标签: ios swift segue master-detail
我在 Swift 中使用主从模型。 但是,我想将在详细视图中创建的类对象发送回主视图。我在主视图中编写了一个展开函数,但在详细视图中看不到后退按钮,因此无法按 ctrl+将其拖到出口。
有谁知道如何设置后退按钮使其可见?
【问题讨论】:
标签: ios swift segue master-detail
不必担心将某些东西连接到后退按钮,您可以在用户更新详细视图控制器中的字段时直接更新模型。为此,您可以传递对包含要更新的属性的某个模型对象的引用(但请确保这是一个引用类型,例如 class,而不是 struct)。
例如:
class Person {
var firstName: String?
var lastName: String?
}
class MasterViewController: UIViewController {
@IBOutlet weak var firstNameLabel: UILabel!
@IBOutlet weak var lastNameLabel: UILabel!
var person = Person()
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let destination = segue.destinationViewController as? DetailViewController {
destination.person = person
}
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
firstNameLabel.text = person.firstName
lastNameLabel.text = person.lastName
}
}
class DetailViewController: UIViewController,UITextFieldDelegate {
var person: Person?
@IBOutlet weak var firstNameTextField: UITextField!
@IBOutlet weak var lastNameTextField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
firstNameTextField.text = person?.firstName
lastNameTextField.text = person?.lastName
}
// Note, I specified the detail view controller to be the delegate
// for the two text fields in IB: I then can detect when editing is
// done and act accordingly.
func textFieldDidEndEditing(textField: UITextField) {
switch textField {
case firstNameTextField:
person?.firstName = textField.text
case lastNameTextField:
person?.lastName = textField.text
default:
assert(false, "unidentified textField \(textField)")
}
}
}
您可以在viewDidAppear 中让主视图控制器自行更新,就像我在上面所做的那样,或者更好的是,您可以为模型属性添加观察者。但希望它能说明基本思想。
【讨论】: