Я действительно хочу реализовать такую категорию, как «UILabel+formattedText», которая позволит мне выполнить метод, который будет красиво форматировать текст в видимом отображении метки, но любой код, который просматривает label.text, просто видит неформатированную числовую строку. Я знаю, что это, наверное, очень просто. Дело в том, что я не могу найти синтаксис для этого. Как именно это будет работать?
Вот мой набросок метода внутри контроллера представления:
- (void)UpdateLabels{
if(!formatter){//initialize formatter if there isn't one yet.
formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setPositiveFormat:@",##0.##"];
[formatter setNegativeFormat:@",##0.##"];
[formatter setMaximumFractionDigits:15];
[formatter setMaximumIntegerDigits:15];
}
NSRange eNotation =[rawDisplay rangeOfString: @"e"];//if there's an 'e' in the string, it's in eNotation.
if ([rawDisplay isEqual:@"Error"]) {
display.text=@"Error";
backspaceButton.enabled = FALSE;
}else if (eNotation.length!=0) {
//if the number is in e-notation, then there's no special formatting necessary.
display.text=rawDisplay;
backspaceButton.enabled =FALSE;
} else {
backspaceButton.enabled =([rawDisplay isEqual:@"0"])? FALSE: TRUE; //disable backspace when display is "0"
//convert the display strings into NSNumbers because NSFormatters want NSNumbers
// then convert the resulting numbers into pretty formatted strings and stick them onto the labels
display.text=[NSString stringWithFormat:@"%@", [formatter stringFromNumber: [NSNumber numberWithDouble:[rawDisplay doubleValue]]]];
}
}
Поэтому я в основном хочу, чтобы по крайней мере функциональность рисования этикетки входила в этикетку. Кстати, этот код соответствует MVC? Это моя первая попытка.
Кроме того, пока я здесь, я могу также спросить: это переходит в нотацию e с относительно небольшим количеством цифр как двойное число. Но когда я пытаюсь изменить double на что-то другое, например longlong, я получаю очень странные результаты. Как я могу иметь большую точность и при этом выполнять все эти операции?