2016-04-22 5 views
0

У меня возникла проблема с обновлением текста на UILabel. My ViewController изменяет свою собственность свойства phoneNumberString. Мое мнение наблюдает за этим изменением свойства и реагирует, изменяя приписываемый текст ярлыка. Он наблюдает, используя ReactiveCocoa.UILabel приписал текст без изменений

[[RACAble(self.phoneNumberString) distinctUntilChanged]subscribeNext:^(id x) { 
    NSString* s=(NSString*)x; 
    UIFont* font=[UIFont systemFontOfSize:numbersFontSize weight:UIFontWeightThin]; 
    NSMutableDictionary* attributesDict=[NSMutableDictionary dictionaryWithObjectsAndKeys:font,NSFontAttributeName, nil]; 

    self.phoneNumberLabel.attributedText = [[NSAttributedString alloc]initWithString:s attributes:attributesDict]; 
    [self.phoneNumberLabel setNeedsDisplay]; 
    NSLog(@"label att text = %@\nlabel text = %@\ninput string = %@\n==",self.phoneNumberLabel.attributedText,self.phoneNumberLabel.text,x); 
}]; 

предоставляет следующий журнал:

label att text = +7 (225{ 
NSFont = "<UICTFont: 0x7a2942c0> font-family: \".SFUIDisplay-Thin\"; font-weight: normal; font-style: normal; font-size: 25.00pt"; 
} 

label text = +7 (225 
input string = +7 (225 

мне нужно отнести текст, который будет расположен в моем UILabel. Проблема в том, что он не дает никаких изменений в симуляторе. (Использование родного [self observeValueForKeyPath...] приводит к тому же эффекту). Я решил эту проблему, используя уведомления с тем же кодом. Но я должен использовать KVO.

Дополнительная информация:

  1. Вот мой код инициализации (перед установкой наблюдателя):

    UILabel* phoneNumberLabel=[[UILabel alloc]init]; 
    
    font=[UIFont systemFontOfSize:numbersFontSize weight:UIFontWeightThin]; 
    
    attributesDict=[NSMutableDictionary dictionaryWithObjectsAndKeys:font,NSFontAttributeName, nil]; 
    
    phoneNumberLabel.attributedText=[[NSAttributedString alloc]initWithString:@"+7 " attributes:attributesDict]; 
    
  2. Оба метода работают на основном потоке.

  3. Рамка UILabel достаточно большая, чтобы выделить ее.
+0

http://stackoverflow.com/questions/27728466/use-multiple-font-colors-in-a-single-label-swift/27728516#27728516 –

+0

У вас есть пытались использовать 'RACObserve' вместо' RACAble'? У меня был большой успех с этим. Кроме того, где вы настраиваете привязку RAC, viewDidLoad? – fullofsquirrels

+0

Да, я пробовал. Я также пробовал с обычными наблюдениями. Я установил его при инициализации представления, в котором содержится метка – Dmitrii

ответ

0

Похоже, что вам не хватает назначения атрибута для диапазона строк. Например,

NSMutableAttributedString *attributedPhoneNumber = [[NSMutableAttributedString alloc] initWithString:x]; 
[attributedPhoneNumber addAttribute:NSFontAttributeName value:font range:NSMakeRange(0, [attributedPhoneNumber length])]; 
self.phoneNumberLabel.attributedText = attributedPhoneNumber; 
+0

Это сообщение: http://stackoverflow.com/questions/13029222/nsattributedstring-default-color-font-etc, похоже, указывает, что изначально, если вы не укажете диапазон, тогда 'initWithString: attributes:' будет использовать диапазон по умолчанию всей строки, что подтверждает мой опыт работы с ним. Однако я не смог найти что-либо в документах Apple для подтверждения. – fullofsquirrels

+0

Я этого не знал. Я пошел на основе кода, который я использовал успешно. Спасибо за информацию! – user212514

1

Если вы использовали классы размера в .xib для установки шрифта метки, тогда приписываемый текст может не работать. Для правильной работы удалите классы размера из .xib-файла

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