【问题标题】:unwind segue not triggering展开 segue 不触发
【发布时间】: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 没有工作。

标签: swift uiviewcontroller segue 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 buttonSecondViewController.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)

作为一种解决方法,这工作正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多