unwind segue不会触发

时间:2016-10-25 14:45:09

标签: swift uiviewcontroller segue unwind-segue

我一直在学习swift,并为我的大多数应用程序奠定了基础。我有以下故事板

app storyboard

一切正常。例如,我在添加课程视图控制器上有一个展开segue,当您按下保存时会触发,并且您将返回到您的课程'查看控制器。

当您在我的课程视图控制器上时,您可以选择课程并显示主题,然后您可以选择一个主题,然后您将被带到更新分数视图控制器,这一切都正常。

然而,我的问题是这个。我想这样做,以便当您在updatescore视图控制器中选择保存时,将触发展开segue(与添加过程中相同),并返回到主题视图控制器中的主题列表。

然而,我已经遵循了许多教程,显然之前已经开始工作了。 (我对unwind segue的操作方法是在正确的主题视图控制器中)但是当我按下save时,unwind segue不会将我返回到主题视图控制器。

有人能说出这个理由吗?我花了很多时间试图找到答案并经历了很多教程,但还没有设法解决它。

我还为我的保存按钮添加了触发的segues连接的屏幕截图,以显示它已设置。 Showing triggered segue for save button

我在更新分数视图控制器中有以下代码

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if saveButton === sender {
        print("save button selected")
   }
}

但是当我点击保存时,即使这不会被触发。

非常感谢

更新: 遵循Ronatorys的建议我的视图控制器的更新得分如下,但它仍然无法正常工作:

导入UIKit

类UpdateScoreTableViewController:UITableViewController {

@IBOutlet weak var topicGettingUpdated: UITextField!
@IBOutlet weak var newScore: UITextField!


@IBOutlet weak var saveButton: UIBarButtonItem!


var index:Int?
var Topics:[String]!


var TopicToUpdate:String?


override func viewDidLoad() {
    super.viewDidLoad()
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

// MARK: - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    guard let uiBarButtonItem = sender as? UIBarButtonItem else {
        print("There is no UIBarButtonItem sender")
        return
    }
}


override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    if indexPath.section == 0 && indexPath.row == 0 {
        newScore.becomeFirstResponder()
    }
    tableView.deselectRowAtIndexPath(indexPath, animated: true)
}

}

但是对segue的准备甚至没有被触发。

2 个答案:

答案 0 :(得分:1)

就像评论中的克雷格所说,找到问题并不容易。所以我只是构建一个简单的应用程序,您可以按照步骤作为指导,看看您是否忘记了正确设置功能的内容。希望它会对你有所帮助。 注意:代码在Swift 3.0中,但应该很容易采用2。*

<强> 1。带有两个视图控制器的故事板:

enter image description here

<强> 2。在FirstViewController.swift

中声明展开segue的操作方法
class FirstViewController: UIViewController {
  // action method for the unwind segue
  @IBAction func updateScore(_ segue: UIStoryboardSegue) {
    print("Back in the FirstViewController")
  } 
}

第3。使用操作方法连接故事板中的Save button(使用ctrl +拖动):

enter image description here

<强> 4。将Save buttonSecondViewController.swift文件相关联,以使用它来检查prepareSegue方法(使用ctrl +拖动):

enter image description here

<强> 5。将prepare(for:sender:)方法添加到SecondViewController.swift

class SecondViewController: UIViewController {

  @IBOutlet weak var saveButtonPressed: UIBarButtonItem!

  override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    // check safely with guard that your save button is the sender and you can use it
    // if not print message
    guard let uiBarButtonItem = sender as? UIBarButtonItem else {
      print("There is no UIBarButtonItem sender")
      return
    }

    // check if you selected the save button
    if saveButtonPressed == uiBarButtonItem {
      print("save button selected")
    }
  }
}

<强>结果:

enter image description here

您可以找到示例应用here

答案 1 :(得分:0)

我没有设法让unwind segue工作,而是使用

navigationController!.popViewControllerAnimated(true)

作为一种解决方法,这很好。