更改UILabel.text的字符串

时间:2013-05-16 08:50:30

标签: ios objective-c uilabel nsobject

aClass.aString = @"A";
self.aLabel.text = aClass.aString;

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

它如何运作?

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

3 个答案:

答案 0 :(得分:12)

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

@property(nonatomic, copy) NSString *text

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

- (void)setAString:(NSString *)aString
{
    _aString = aString;
    self.aLabel.text = aString;
}

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

答案 1 :(得分:1)

除了覆盖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.
}

答案 2 :(得分:0)

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

Is there any data binding mechanism available for iOS?

它的要点是没有好办法做到这一点;但是,使用NSNotificationCenter并监听特定的更改时,有一些混乱的方法。

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