【问题标题】:Disable buttons of 1 view controller in another view controller在另一个视图控制器中禁用 1 个视图控制器的按钮
【发布时间】:2017-09-06 18:07:45
【问题描述】:

我在尝试禁用按钮与另一个视图控制器中的一个视图控制器的用户交互时遇到问题。

我在这里搜索过类似的问题,但有些问题似乎已经过时或不适合我: How to access an IBOutlet from another class.

我的场景如下:

class ViewControllerA() {

  @IBOutlet weak var btnFirst: UIButton!
  @IBOutlet weak var btnSecond: UIButton!
  @IBOutlet weak var btnThird: UIButton!

  override func viewDidLoad() {
    var vcB = ViewControllerB()
    vcB.closure = {
    // Meet some condition, want to disable buttons of ViewControllerA here
    }
  }

}

class ViewControllerB() {
   var closure: () -> Void = {}
   // Do something with closure here
}

我的问题是我在闭包中设置断点并尝试在闭包中直接使用 IBOulet 来禁用按钮,例如:

btnFirst.isUserInteractionEnabled = false

或者尝试在 ViewControllerB 的闭包中设置 ViewControllerA 的一个属性,并使用属性观察器,每当这个属性发生变化时,启用或禁用 ViewControllerA 的按钮。

我的问题是,我仍然可以像启用一样单击按钮。抱歉,我无法发布代码,请帮助我!

谢谢

【问题讨论】:

  • 你需要发布你在做什么的代码!否则我们将无法看到您犯了什么错误!

标签: ios swift closures


【解决方案1】:

您可以从第二个视图控制器发布通知,并在第一个视图控制器中为该特定发布的通知添加观察者。

在该观察者方法中,您可以执行您的操作,例如禁用第一个视图控制器按钮的用户交互。

【讨论】:

    【解决方案2】:

    由于您没有发布任何相关代码,我只能猜测可能发生了什么:

    我假设您没有访问 正确 视图控制器的btnFirst。在ViewControllerA.viewDidLoad 中,您正在创建ViewControllerB 的新实例并设置闭包。您是否还准确地显示了这个视图控制器的视图?或者用户将如何导航到 B?如果您使用故事板转场,那些将创建一个新的 B 实例并显示其视图。现在,当您在 A 中执行闭包时,这将禁用第一个 B 的按钮,而不是显示的 B 的按钮。

    但这仍然只是一个猜测......

    【讨论】:

      猜你喜欢
      • 2012-10-23
      • 1970-01-01
      • 2015-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多