Swift Can';使用segue将值从第一个VC传递到第二个VC
我有两个Swift Can';使用segue将值从第一个VC传递到第二个VC,swift,macos,segue,swift4,nsslider,Swift,Macos,Segue,Swift4,Nsslider,我有两个ViewControllers通过Showsegue连接。我需要将NSSlider的值从ViewController传递到SecondViewCotroller 因此,在ViewController中移动滑块,变量将在SecondViewController中更新 如何更新imagesQty变量的值 // FIRST VIEW CONTROLLER import Cocoa class ViewController: NSViewController { @IBOutlet
ViewControllers
通过Show
segue连接。我需要将NSSlider
的值从ViewController
传递到SecondViewCotroller
因此,在ViewController
中移动滑块,变量将在SecondViewController
中更新
如何更新imagesQty
变量的值
// FIRST VIEW CONTROLLER
import Cocoa
class ViewController: NSViewController {
@IBOutlet weak var slider: NSSlider!
@IBOutlet weak var photosLabel: NSTextField!
@IBAction func segueData(_ sender: NSSlider) {
photosLabel.stringValue = String(slider.intValue) + " photos"
self.performSegue(withIdentifier: NSStoryboardSegue.Identifier(rawValue: "SegueIdentifierForSecondVC"), sender: slider)
}
func prepare(for segue: NSStoryboardSegue, sender: NSSlider?) {
if segue.identifier!.rawValue == "SegueIdentifierForSecondVC" {
if let secondViewController =
segue.destinationController as? SecondViewController {
secondViewController.imagesQty = slider.integerValue
}
}
}
}
及
无法更改该值,因为var是在函数中定义的,而不是在类中定义的 将您的var设置为类属性,它应该可以工作
class SecondViewController: UIViewController {
var imagesQty: Int = 30
...
}
无法更改该值,因为var是在函数中定义的,而不是在类中定义的 将您的var设置为类属性,它应该可以工作
class SecondViewController: UIViewController {
var imagesQty: Int = 30
...
}
首先,
NSStoryboardSegue.Identifier
的目的和好处是创建一个能够避免文本的扩展
extension NSStoryboardSegue.Identifier {
static let secondVC = NSStoryboardSegue.Identifier("SegueIdentifierForSecondVC")
}
然后你就可以写了
self.performSegue(withIdentifier: .secondVC, sender: slider)
及
发生此错误的原因是
imagesQty
在view中声明将出现
,而不是出现在类的顶层
换成
class SecondViewController: NSViewController {
var imagesQty = 30 // Int is inferred
// override func viewWillAppear() {
// super.viewWillAppear()
// }
}
还有一个错误:prepare(for segue
的签名错误。它必须是
func prepare(for segue: NSStoryboardSegue, sender: Any?) {
首先,
NSStoryboardSegue.Identifier
的目的和好处是创建一个能够避免文本的扩展
extension NSStoryboardSegue.Identifier {
static let secondVC = NSStoryboardSegue.Identifier("SegueIdentifierForSecondVC")
}
然后你就可以写了
self.performSegue(withIdentifier: .secondVC, sender: slider)
及
发生此错误的原因是
imagesQty
在view中声明将出现
,而不是出现在类的顶层
换成
class SecondViewController: NSViewController {
var imagesQty = 30 // Int is inferred
// override func viewWillAppear() {
// super.viewWillAppear()
// }
}
还有一个错误:prepare(for segue
的签名错误。它必须是
func prepare(for segue: NSStoryboardSegue, sender: Any?) {
我修复了代码。我正在移动滑块,并且值没有更改。可能是其他原因?操作是否已连接?是否执行了该序列?第二个视图控制器的类是否设置为
SecondViewController
?操作已连接(从滑块到控制器,查看图片).Class是SecondViewController。如何检查是否执行segue?设置断点,插入打印
行。请查看更新的答案。覆盖函数准备(对于segue:NSStoryboardSegue,发件人:任何?{}setI是否已修复代码。我正在移动滑块,且值未更改。可能是其他原因?操作是否已连接?是否执行了所有步骤?第二个视图控制器的类是否设置为SecondViewController
?操作已连接(从滑块到控制器,查看图片).Class是SecondViewController。如何检查是否执行segue?设置断点,插入打印
行。请查看更新的答案。override func prepare(对于segue:NSStoryboardSegue,发件人:Any?)已设置{}