我一直在学习swift,并为我的大多数应用程序奠定了基础。我有以下故事板
一切正常。例如,我在添加课程视图控制器上有一个展开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的准备甚至没有被触发。
答案 0 :(得分:1)
就像评论中的克雷格所说,找到问题并不容易。所以我只是构建一个简单的应用程序,您可以按照步骤作为指导,看看您是否忘记了正确设置功能的内容。希望它会对你有所帮助。 注意:代码在Swift 3.0中,但应该很容易采用2。*
<强> 1。带有两个视图控制器的故事板:
<强> 2。在FirstViewController.swift
:
class FirstViewController: UIViewController {
// action method for the unwind segue
@IBAction func updateScore(_ segue: UIStoryboardSegue) {
print("Back in the FirstViewController")
}
}
第3。使用操作方法连接故事板中的Save button
(使用ctrl +拖动):
<强> 4。将Save button
与SecondViewController.swift
文件相关联,以使用它来检查prepareSegue
方法(使用ctrl +拖动):
<强> 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")
}
}
}
<强>结果:强>
您可以找到示例应用here
答案 1 :(得分:0)
我没有设法让unwind segue工作,而是使用
navigationController!.popViewControllerAnimated(true)
作为一种解决方法,这很好。