展开 segue 不触发
Posted
技术标签:
【中文标题】展开 segue 不触发【英文标题】:unwind segue not triggering 【发布时间】:2016-10-25 14:45:08 【问题描述】:我一直在学习 swift,并为我的大部分应用奠定了基础。我有以下情节提要
app storyboard
一切正常。例如,我在添加课程视图控制器上有一个展开转场,当您按下保存并返回到“您的课程”视图控制器时触发。
当您在我的课程视图控制器上时,您可以选择一门课程并显示主题,然后您可以选择一个主题并进入更新分数视图控制器,这一切都很好。
但是,我的问题是这样的。我想这样做,以便当您在更新分数视图控制器中选择保存时,会触发展开转场(与添加课程中相同),并且您将返回到主题视图控制器中的主题列表。
但是,我已经学习了许多教程,并且显然之前可以使用它。 (我的展开转场的操作方法在正确的主题视图控制器中)但是当我按下保存时,展开转场并没有将我返回到主题视图控制器。
有人可以提出原因吗?我花了很多时间试图找到答案并浏览了许多教程但没有设法解决它。
我还为我的保存按钮添加了触发 segue 的连接的屏幕截图,以显示它已设置。 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)
但是准备转场甚至没有被触发。
【问题讨论】:
如果没有更多信息,很难帮助您解决这个问题。prepareForSegue
没有被触发的事实仅仅证实了 unwind segue 没有工作。
【参考方案1】:
就像 cmets 中的 Craig 所说,要找到问题并不是那么容易。因此,我只是构建了一个简单的应用程序,您可以在其中按照指导步骤进行操作,看看您是否忘记了正确设置功能的内容。希望它会帮助你。 注意:代码在 Swift 3.0 中,但应该易于采用 2.*
1.带有两个视图控制器的情节提要:
2。在FirstViewController.swift
中声明unwind segue的动作方法:
class FirstViewController: UIViewController
// action method for the unwind segue
@IBAction func updateScore(_ segue: UIStoryboardSegue)
print("Back in the FirstViewController")
3.将 Storyboard 中的Save button
与 action 方法(使用 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的示例应用程序
【讨论】:
嗨,Ronatory,非常感谢,但它没有奏效。我尝试按照您的所有步骤操作,但是当我按保存时仍然没有任何反应。甚至没有触发 segue 的准备,并且控制台中没有显示“没有 UIBarButtonItem 发件人”。我想也许我对导航控制器有一些不明白的地方。因此,我删除了嵌入更新分数的导航控制器,一切正常,我理解这一点,即我可以导航回堆栈。正是在这一点上,我无法让那个保存按钮工作。【参考方案2】:我没有设法让 unwind segue 工作,而是使用了
navigationController!.popViewControllerAnimated(true)
作为一种解决方法,这工作正常。
【讨论】:
以上是关于展开 segue 不触发的主要内容,如果未能解决你的问题,请参考以下文章