如何从 Class 方法设置 @IBOutlet 文本

How to set @IBOutlet text from a Class method

我有一个名为 Sentence 的 class,我想在我的 ViewController 中设置 @IBOutlettext 属性在 Sentence 的一种方法中。那可能吗?如果不是,在 Sentence class 方法本身中,我如何进行调用或设置 class 方法中的 @IBOutlet 文本的函数?

这是我的UILabel

@IBOutlet weak var kleinGrossLabel: UILabel!

您不能从另一个 class 的 class 方法中的 UIViewController 分配 IBOutlet。其他 class(在你的情况下 Sentence)应该如何了解视图控制器?

您有几个选择:

  1. Sentence 对象中保留对视图控制器的引用。
  2. 使用委托:在您的 Sentence 实例上设置一个指向视图控制器的委托,并让其中一种协议方法访问 IBOutlet.
  3. 的内容
  4. 使用 NSNotificationCenter 从您的 Sentence 对象发出您的视图控制器正在侦听的通知,并且可以直接更新它的 IBOutlet

紧耦合是指像 Sentence 这样的 class 承担其关注范围之外的事情的责任,例如视图控制器的插座。

这些类型的更改很难追踪,因为状态更改的位置并不明显。

虽然您可以通过使用委托或通知松散地耦合 Sentence,但它仍然会使(单元或 UI)测试以及支持和维护您的代码变得更加困难,当一个 class (in) 直接影响另一个 class.

的状态时

另一种方式

您可以通过为 Sentence 提供 public 方法来将此责任移出 Sentence,其中 returns 所需的 属性.

通过像这样建立清晰的界面边界,它可以让您的代码更加模块化,让您可以更改 Sentence 的实现或视图控制器的出口,而不会影响其他 class.

它还允许视图控制器(从 MVC 的角度来看)单独负责更改视图的文本 属性。

现在,您可以从视图控制器调用句子实例的 public 方法,然后根据返回值设置视图控制器的 IBOutlet 文本 属性。这将使文本更改的位置和原因一目了然,而不是将更改隐藏在另一个(class 的)方法中。