2014-08-17 5 views
-2

Я хочу изменить текст UILabel. Но текст одинаковый для 3 меток, поэтому мне интересно, могу ли я сделать что-то вроде хранения экземпляра соответствующего UILabel и написать общий формат строки для изменения текста.Как изменить текст UILabel динамически?

Так вот мой IBOutlet:

@property (strong, nonatomic) IBOutlet UILabel *pushupDetails; 
@property (strong, nonatomic) IBOutlet UILabel *situpDetails; 
@property (strong, nonatomic) IBOutlet UILabel *runDetails; 

Это то, что я надеюсь достичь (упрощенно):

-(void)updateDetailText:(NSArray *)results station:(int)station { 
    UILabel *templabel; 
    switch (station) { 
     case 0: 
      templabel = [self.pushupDetails mutableCopy]; 
      break; 
     case 1: 
      templabel = [self.situpDetails mutableCopy]; 
      break; 
     case 2: 
      templabel = [self.runDetails mutableCopy]; 
      break; 
     default: 
      break; 
    } 

    templabel.text = [NSString stringWithFormat:@"You need %d - %d reps", 10, 50]; 
} 

Однако аварийное завершение программы с

-[UILabel mutableCopyWithZone:]: unrecognized selector sent to instance 0x10b82b920 
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UILabel mutableCopyWithZone:]: unrecognized selector sent to instance 0x10b82b920' 

моментом выполняется mutableCopy. Можно ли достичь того, чего я хочу, или мне нужно писать каждое отдельное изменение текста отдельно?

ответ

0

UILabel не соответствует NSCopying класс, из-за этого вы не можете использовать copy OR mutableCopy.

Вы должны использовать, как показано ниже, например

switch (station) { 
     case 0: 
      templabel = self.pushupDetails; 
      break; 
     case 1: 
      templabel = self.situpDetails; 
      break; 
     case 2: 
      templabel = self.runDetails; 
      break; 
     default: 
      break; 
    } 
0

Вы можете дать каждому маркировать метки 0, 1 и 2.

Затем измените метод, как это:

-(void)updateDetailText:(NSArray *)results station:(int)station 
{  
    ((UILabel *) [self viewWithTag:station]).text = [NSString stringWithFormat:@"You need %d - %d reps", 10, 50];; 
} 

Или, вы можете попробовать в каждом тесте случае, чтобы использовать обычный присвоение:

templabel = pushupDetails; 

потому что вам нужно ссылаться на фактический объект, а не на его копию.

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