更改 UILabel.text 的字符串

Posted

技术标签:

【中文标题】更改 UILabel.text 的字符串【英文标题】:Change the string of UILabel.text 【发布时间】:2013-05-16 08:50:29 【问题描述】:
aClass.aString = @"A";
self.aLabel.text = aClass.aString;

如果我将 aClass.aString 更改为“B”,也希望 self.aLabel.text 自动更改为“B”。

它是如何工作的?

是否存在我可以在 aClass.aString 和 self.aLabel.text 之间建立的强链接? 我知道在objective-c、delegateKVO中有一些方法可以做到这一点,但是它有很多事情要做,有没有简单的方法?

【问题讨论】:

@fansEagle 你已经得到了一些很好的答案,而不是向他们学习你反对他们。你是否需要帮助?如果是这样,请倾听并学习。 对不起,我的错,我没有学好Objective-c,我又编辑了我的问题,所以请帮助我。 【参考方案1】:

您必须自己管理。如果您查看 UILabel text 属性 (link) 的定义,您会发现它复制了字符串内容,正是出于这个原因:

@property(nonatomic, copy) NSString *text

您可以为aString 属性编写自定义设置方法:

- (void)setAString:(NSString *)aString

    _aString = aString;
    self.aLabel.text = aString;

(如果您遵循让clang 为您生成支持实例变量和访问器方法的当前趋势,那么您可能需要显式声明这个特定的,即使用名为_aString 的实例变量)。

【讨论】:

@fansEagle 您的问题表明aStringaLabel 属于同一类。如果不是这种情况,那么您需要编辑您的问题。【参考方案2】:

除了重写setter方法之外的另一种方法,

- (void)setAString:(NSString *)aString

正在使用 KVO 来观察字符串值的变化。

[self addObserver: self
        forKeyPath: @"aString"
           options: NSKeyValueObservingOptionNew
           context: NULL];

实现这个方法。每当字符串值发生变化时都会调用它。

-(void) observeValueForKeyPath: (NSString *)keyPath ofObject: (id) object
                    change: (NSDictionary *) change context: (void *) context

    //Set the label's text with new value.

【讨论】:

我再次编辑了我的问题,请阅读并告诉我解决问题的最佳方法,谢谢。【参考方案3】:

您可能希望使用此处更好地解释的机制:

Is there any data binding mechanism available for ios?

它的要点是没有很好的方法来做到这一点;但是,使用 NSNotificationCenter 并监听特定更改有一些麻烦的方法。

UI 绑定本身在 iOS 上不存在(这是我从 Mac OS X 转换到 iOS 时最大的震惊)。

【讨论】:

以上是关于更改 UILabel.text 的字符串的主要内容,如果未能解决你的问题,请参考以下文章

无法从另一个视图控制器更改 UILabel.text,UILabel 得到 nil 值

如何防止 sizeToFit 更改 UILabel 宽度?

Swift 线程 1:当我尝试更改 uilabel.text 时出现 EXC_BAD_INSTRUCTION

如何在UILabel iOS中显示表情符号

UIButton 在 UILabel text+iPhone 之间

更新 UILabel Text 会重置情节提要?