【问题标题】:Pass Bool() value between dfferent swift targets在不同的 swift 目标之间传递 Bool() 值
【发布时间】:2015-03-25 07:33:51
【问题描述】:

我正在尝试在我的容器应用程序中为我的 customKeyboard for iOS8 在 Swift 中创建一个设置视图控制器。我已经创建了一个 Bool() 并且我得到了我需要的东西,但是现在我需要让键盘目标检查 bool 值并且我无法导入其他 swift 文件..

我有这个代码:

ViewControllerSettings.swift

@IBOutlet weak var Switch1: UISwitch!

var dotOn = Bool()


override func viewDidLoad() {
    super.viewDidLoad()


    if NSUserDefaults.standardUserDefaults().boolForKey("dotOn") == true {

        Switch1.setOn(true, animated: true)

    } else {

        Switch1.setOn(false, animated: true)

    }


  @IBAction func backSave(sender: UIButton) {

    if Switch1.on == true {


        NSUserDefaults.standardUserDefaults().setBool(true, forKey: "dotOn")

    } else {

        NSUserDefaults.standardUserDefaults().setBool(false, forKey: "dotOn")

    }
  }

而且效果很好!但是在我的 KeyboardViewController.swift 中的另一个应用程序目标中,我在 viewDidAppear(animated: true) 中拥有:

  if NSUserDefaults.standardUserDefaults().boolForKey("dotOn") == true {

let bSelector : Selector = "dotAfterSpace:"
    let doubleTapGesture = UITapGestureRecognizer(target: self, action:   bSelector)
    doubleTapGesture.numberOfTapsRequired = 2
    space.addGestureRecognizer(doubleTapGesture)

 } else { }

而且这个没有“if”的函数运行良好……我该怎么办?


经过一些建议后,我编写了这段代码……但我错在哪里?

KeyboardViewController.swift 中:

class KeyboardViewController: UIInputViewController {
     var otherController = ViewControllerSettings()

override func viewDidAppear(animated:Bool) {
   super.viewDidAppear(animated)

   KeyboardViewController().otherController = ViewControllerSettings()

    if otherController.dotOn {

        let bSelector : Selector = "dotAfterSpace:"
        let doubleTapGesture = UITapGestureRecognizer(target: self, action: bSelector)
        doubleTapGesture.numberOfTapsRequired = 2
        space.addGestureRecognizer(doubleTapGesture)

    } else { }

    let aSelector : Selector = "spacePressed:"
    let tapGesture = UITapGestureRecognizer(target: self, action: aSelector)
    tapGesture.numberOfTapsRequired = 1
    space.addGestureRecognizer(tapGesture)

}

ViewControllerSettings.swift 中:

class ViewControllerSettings: UIViewController {

 var dotOn = Bool()

【问题讨论】:

  • 如果 NSUserDefaults.standardUserDefaults().boolForKey("dotOn") {...}
  • 不需要“== true”
  • 同样适用于 Switch.on == true
  • @LeonardoSavioDabus 它不起作用.. :/
  • 它不会解决你的问题,只是不需要

标签: xcode swift ios8 boolean custom-keyboard


【解决方案1】:

在控制器的两侧创建一个属性:

class ViewController1:<CtrlType1> {
   var otherController:<CtrlType2>

   func doSomething() {
     if otherController.sharedBool { .... }
   }
 }

class ViewController2:<CtrlType2> {
   var sharedBool = false

 }

在您创建两个实例的地方(或它们已由 IB 创建的地方)添加

 viewController1.otherController = viewController2

这样您就可以在两种情况下都使用布尔值。

另一种方法是使用单例,但是对于一个简单的布尔值来说,这将是多余的。

【讨论】:

  • 你的意思是两个控制器的类型?我有一个 UIViewController 和一个 UIInputViewController... 可以吗?因为它不起作用..
  • 尖括号中的类型必须替换为您使用的真实类型。在 OSX 中它是 NSViewController。
  • 但它告诉我 不是前缀一元运算符并且不读取属性..
  • 如果我用 UIVIewController 的名称代替 : var otherController = ViewControllerSettings() 它在运行时不会执行任何操作...
  • 当然不是。您必须从外部分配它。这样你就创建了一个新实例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-29
  • 2013-01-05
  • 1970-01-01
相关资源
最近更新 更多