2013-05-16 2 views
1
aClass.aString = @"A"; 
self.aLabel.text = aClass.aString; 

Если изменить aClass.aString к "B", также хотят self.aLabel.text изменения в "B" автоматически.Изменить строку UILabel.text

Как это работает?

Есть ли сильная связь, которую я могу построить между aClass.aString и self.aLabel.text? Я знал, что есть какой-то способ сделать это в объективе-c, делегировать и KVO, но для этого нужно много чего сделать, это простой способ?

+1

делают использование делегата –

+0

@fansEagle вы получили некоторые большие ответы и вместо того, чтобы учиться у них вы спорите против них. Вам нужна помощь или нет? Если да, слушайте и учитесь. – matt

+0

Извините, мое плохое, я не очень хорошо разбираюсь в Objective-c, я снова редактировал свой вопрос, поэтому, пожалуйста, помогите мне. – al03

ответ

0

Вы можете использовать этот механизм лучше объяснить здесь:

Is there any data binding mechanism available for iOS?

Суть его там нет хорошего способа сделать это; есть, однако, грязные способы сделать это, используя NSNotificationCenter и прослушивая конкретные изменения.

UI-привязки сами по себе не существуют на iOS (это был мой самый большой шок при конвертации из Mac OS X в iOS).

12

Вам придется управлять этим самостоятельно. Если вы посмотрите на определении свойства UILabeltext (link) вы увидите, что она копирует содержимое строки, именно по этой причине:

@property(nonatomic, copy) NSString *text 

Вы могли бы написать метод пользовательских сеттеров для aString собственности:

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

(Если вы после текущей тенденции позволяя clang генерировать переменный экземпляр подложки и методы доступа для вас, то вам, вероятно, нужно явно объявить эту конкретные один, то есть, используя переменный экземпляр с именем _aString).

+0

Но если aString не в этом классе, как его решить? – al03

+0

@fansEagle В вашем вопросе говорится, что и 'aString', и' aLabel' находятся в одном классе. Если это не так, вам нужно отредактировать свой вопрос. – trojanfoe

+0

Извините, я отредактировал мой вопрос, пожалуйста, помогите мне снова. Благодарю. – al03

1

Еще один способ, кроме перекрывая сеттер метод,

- (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. 
} 
+0

KVO? У этого есть пылкий способ решить это? – al03

+0

Да, это еще один способ решить вашу проблему. – Amar

+0

Я отредактировал мой вопрос еще раз, пожалуйста, прочитайте его и дайте мне лучший способ его решить, спасибо. – al03

Смежные вопросы