从导航栏中的栏按钮项到另一个视图控制器的 Segue 不会运行我的代码?



我的应用程序中的 segue 有问题。

我在导航栏中添加了一个栏按钮项,然后按 ctrl 将其拖动到另一个视图控制器,该控制器在测试时按预期工作。 这次我再次按住 ctrl 键,使其成为其自己的 VC 中的操作并添加了代码。

当它被按下以及执行 segue 时,我想发生的事情,但只有 segue 发生。如果我删除 segue,那么代码就会运行,但我无法让两者像我预期的那样协同工作。

这是我的代码:

import UIKit
import CoreData
class NewClientViewController: UIViewController, UITextFieldDelegate {
    var managedObjectContext: NSManagedObjectContext!
    @IBOutlet weak var nameTextField: UITextField!
    @IBOutlet weak var ageTextField: UITextField!
    @IBOutlet weak var telephoneTextField: UITextField!
    @IBOutlet weak var emailTextField: UITextField!
    @IBOutlet weak var heightTextField: UITextField!
    @IBOutlet weak var weightTextField: UITextField!
    override func viewDidLoad() {
        super.viewDidLoad()
        managedObjectContext = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
    }
    // Dismiss keyboard when empty space tapped
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        nameTextField.endEditing(true)
        ageTextField.endEditing(true)
        telephoneTextField.endEditing(true)
        emailTextField.endEditing(true)
        heightTextField.endEditing(true)
        weightTextField.endEditing(true)
    }
    // Dismiss keyboard when return tapped
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true
    }
    @IBAction func saveButton(_ sender: Any) {
        let clientItem = Client(context: managedObjectContext)
        clientItem.name = nameTextField.text
        clientItem.age = ageTextField.text
        clientItem.telephone = telephoneTextField.text
        clientItem.email = emailTextField.text
        clientItem.height = heightTextField.text
        clientItem.weight = weightTextField.text
        do
        {
            try self.managedObjectContext.save()
            print("Successfully Saved!")
        }
        catch
        {
            print("Could not save data (error.localizedDescription)")
        }
    }
}

segue 从firstViewController拖到secondViewController,然后向其添加identifier。然后在按钮操作中,您只需执行以下操作:

performSegue(withIdentifier: "yourIdentifier", sender: nil)

如果要传递任何值,请添加以下函数:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "yourIdentifier" {
        let secondViewController = segue.destination as! SecondViewController
    }
}

我仍然遇到问题,并设法使用

performSegue(withIdentifier: "yourIdentifier", sender: nil)

但它必须来自我想要的VC,正如我所期望的那样。

阻止这种情况正确发生的问题是按钮。当我在导航栏中创建它时,我不会在里面进行修饰,所以为了克服这个问题,我制作了按钮并将其放在 VC 上而不是导航栏上,我正常链接它并添加我的代码然后将其拖到导航栏中,一切正常!

最新更新