gpt4 book ai didi

swift - 展开 segue 不触发

转载 作者:搜寻专家 更新时间:2023-10-31 19:37:35 25 4
gpt4 key购买 nike

我一直在学习 Swift,并为我的大部分应用奠定了基础。我有以下 Storyboard

app storyboard

一切正常。例如,我在添加类(class) View Controller 上有一个 unwind segue,当您按下保存并返回到“您的类(class)” View Controller 时触发。

当您在我的类(class) View Controller 上时,您可以选择一门类(class)并显示主题,然后您可以选择一个主题并转到更新分数 View Controller ,这一切都很好。

但是,我的问题是这样的。我想这样做,以便当您在 updatescore View Controller 中选择保存时,将触发展开转场(与在添加类(class)中相同),然后您将返回到主题 View Controller 中的主题列表。

但是,我已经学习了很多教程并且显然之前已经开始工作了。 (我的 unwind segue 操作方法在正确的主题 View Controller 中)但是当我按下保存时,unwind segue 没有返回到主题 View Controller 。

任何人都可以提出一个原因吗?我花了很多时间试图找到答案并浏览了很多教程,但都没有设法解决它。

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

我在更新分数 View Controller 中有以下代码

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

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

非常感谢

更新:遵循 Ronatories 的建议后,我的更新分数 View Controller 如下所示,但它仍然无法正常工作:

导入 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 的准备甚至没有被触发。

最佳答案

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

<强>1。带有两个 View Controller 的 Storyboard:

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。将 Storyboard 中的 Save 按钮 连接到操作方法(使用 ctrl + 拖动):

enter image description here

<强>4。将您的 Save 按钮SecondViewController.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

关于swift - 展开 segue 不触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40243008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com