【问题标题】:Sending value back from detail to master将价值从细节发回给主人
【发布时间】:2015-10-04 04:27:44
【问题描述】:

我在 Swift 中使用主从模型。 但是,我想将在详细视图中创建的类对象发送回主视图。我在主视图中编写了一个展开函数,但在详细视图中看不到后退按钮,因此无法按 ctrl+将其拖到出口。

有谁知道如何设置后退按钮使其可见?

【问题讨论】:

    标签: ios swift segue master-detail


    【解决方案1】:

    不必担心将某些东西连接到后退按钮,您可以在用户更新详细视图控制器中的字段时直接更新模型。为此,您可以传递对包含要更新的属性的某个模型对象的引用(但请确保这是一个引用类型,例如 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 中让主视图控制器自行更新,就像我在上面所做的那样,或者更好的是,您可以为模型属性添加观察者。但希望它能说明基本思想。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-09
      • 1970-01-01
      • 2013-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多