【问题标题】:Set value in random ViewController (random segue)在随机 ViewController 中设置值(随机 segue)
【发布时间】:2016-06-23 20:52:29
【问题描述】:

我有 12 个视图控制器。我的代码为这些 ViewController 之一(1-12)提供了一个随机的 segue

let segues = ["View1", "View2", "View3", "View4", "View5", "View6", "View7", "View8", "View9", "View10", "View11", "View12"]
    let index = Int(arc4random_uniform(UInt32(segues.count)))
    let segueName = segues[index]
    self.performSegueWithIdentifier(segueName, sender: self)

.

现在,我想更改已选择的随机 ViewController 中的一个变量 (var firstSegue = false),但我不知道怎么做?

.

有人能把它改成可行的吗?

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    let destinationVC = segue.destinationViewController as UIViewController
    destinationVC.firstSegue = true
}

【问题讨论】:

    标签: ios swift uiviewcontroller segue


    【解决方案1】:

    使用firstSegue 属性创建一个协议并将其扩展到您的所有视图控制器。然后用as? TheProtocolYouMade代替as UIViewController

    或者使用一个通用的子类。

    编辑:示例代码

    使用firstSegue 属性创建协议

    protocol P {
        var firstSegue: Bool { get set }
    }
    

    将其扩展到您的所有视图控制器。

    extension YOURViewController1: P {
    }
    

    假设 YOURViewController1 中有一个var firstSegue: Bool。现在该属性是 YOURViewController1 符合协议 P 的方式。对所有具有该属性的视图控制器执行此操作。

    现在你可以写这段代码了

    if let asP = segue.destinationViewController as? P {
       // you can access asP.firstSegue here
    }
    

    【讨论】:

    • 您能否举一个带有firstSegue 的协议示例?我无法确切理解如何将其放入代码中,但我认为您得到了正确的答案。 :-)
    【解决方案2】:

    由于此控制器具有不是来自标准 UIViewController 的属性,而不是一些自定义控制器,因此您可以强制转换它并填充此值。您也可以使用 KVC - 这不是真正安全的解决方案。

    【讨论】:

      猜你喜欢
      • 2013-10-20
      • 2013-11-11
      • 2014-11-21
      • 2014-10-30
      • 2014-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多