Swift 单击导航栏上的“后退”按钮时,视图中的快速展开序列将消失
我正在尝试使用ViewWillEnglishe函数中的“展开序列”更改标签文本。每次调用ViewWillEnglishe函数时,它都会自动跳过我的展开序列行,而不是执行它 我使用的是Xcode 9和Swift 4.2 这是我的密码: 主页ViewController.swiftSwift 单击导航栏上的“后退”按钮时,视图中的快速展开序列将消失,swift,xcode,segue,Swift,Xcode,Segue,我正在尝试使用ViewWillEnglishe函数中的“展开序列”更改标签文本。每次调用ViewWillEnglishe函数时,它都会自动跳过我的展开序列行,而不是执行它 我使用的是Xcode 9和Swift 4.2 这是我的密码: 主页ViewController.swift import UIKit import Foundation struct globalConstant { let lostMessage : String = "You Lost!" let welco
import UIKit
import Foundation
struct globalConstant {
let lostMessage : String = "You Lost!"
let welcomeMessage : String = "WELCOME"
let playAgainMessage : String = "Play again"
let resumeMessage : String = "Resume"
let pausedMessage : String = "Game is paused"
let playMessage : String = "Play Game"
}
class ViewController: UIViewController {
var globalConst = globalConstant()
var labelValue : String!
//start Outlet
@IBOutlet weak var mainLabel: UILabel!
@IBOutlet weak var startButton: UIButton!
//end Outlet
@IBAction func unwindFromGame(_ sender: UIStoryboardSegue){
let gameController = sender.source as? gamePageViewController
if (gameController?.balVariables.balanceValue)! <= 0{
mainLabel.text = gameController?.balVariables.abc
}
else {
mainLabel.text = self.globalConst.pausedMessage
}
}
}
import UIKit
import Foundation
struct balanceVariables {
//declare var start
var initBalance : Int = 500
var balanceValue : Int = 0
let abc = "abc"
//declare var end
}
class gamePageViewController: UIViewController {
// override func addChild(_ gamePageViewController: UIViewController) {
// }
@IBOutlet weak var valueHolder: UILabel!
var balVariables = balanceVariables()
override func viewDidLoad() {
super.viewDidLoad()
//run on page load
if balVariables.balanceValue <= 0 {
balVariables.balanceValue = balVariables.initBalance
valueHolder.text = String(balVariables.balanceValue)
}else{
balVariables.balanceValue = balVariables.balanceValue
}
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
performSegue(withIdentifier: "unwindFromGame", sender: self)
}
// override func didMove(toParent ViewController: UIViewController?){
// performSegue(withIdentifier: "unwindFromGame", sender: self)
// }
导入UIKit
进口基金会
结构全局常数{
let lostMessage:String=“你输了!”
welcomeMessage:String=“欢迎”
让我们再播放一次消息:String=“再次播放”
让resumeMessage:String=“Resume”
let pausedMessage:String=“游戏暂停”
让我们玩消息:String=“玩游戏”
}
类ViewController:UIViewController{
var globalConst=globalConstant()
var labelValue:String!
//启动出口
@IBVAR主标签:UILabel!
@IBVAR启动按钮:UIButton!
//末端出口
@iAction func unwindFromGame(u发件人:UIStoryboardSegue){
让gameController=sender.source为?gamePageViewController
如果(gameController?.balVariables.balanceValue)!让我们使用委托模式而不是使用展开序列来尝试它
首先,为您的gamePageViewController
创建代理协议,并声明用于发送balanceVariables
protocol GamePageDelegate {
func sendBalVariable(_ variable: balanceVariables)
}
override func viewWillDisappear(_ animated: Bool) {
delegate?.sendBalVariable(balVariables)
}
现在在gamePageViewController
class gamePageViewController: UIViewController {
var delegate: GamePageDelegate?
...
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "yourIdentifier" {
let destinationVC = segue.destination as! gamePageViewController
destinationVC.delegate = self
}
}
然后将此委托实现到您的ViewController
,并声明在委托上调用此方法时应该发生什么
class ViewController: UIViewController, GamePageDelegate {
...
func sendBalVariable(_ variable: balanceVariables) {
if variable.balanceValue <= 0 {
mainLabel.text = variables.abc
} else {
mainLabel.text = self.globalConst.pausedMessage
}
/* mainLabel.text = variable.balanceValue <= 0 ? variables.abc : self.globalConst.pausedMessage */
}
}
最后,在gamePageViewController
中,当视图消失且ass参数传递balVariables
protocol GamePageDelegate {
func sendBalVariable(_ variable: balanceVariables)
}
override func viewWillDisappear(_ animated: Bool) {
delegate?.sendBalVariable(balVariables)
}
@StevenStuu不要使用任何展开序列,使用我写的。“yourIdentifier”是从ViewController
到第二个序列的标识符“yourIdentifier”应该是什么be?destinationVC.delegate=self行给了我一个错误:“UIViewController”类型的值没有成员“delegate”你看到序列图像板中第一个和第二个VC之间的箭头了吗?点击它,你会看到右边的文本框,在那里写下你的标识符我在主VC和第二个VC之间的段中添加了一个标识符脚本中的VC,错误仍然存在。@StevenStuu,您是否覆盖了我描述的prepare方法?