Я хочу спросить, как объединить x количество строк с атрибутами и сделать одну строку.

    NSMutableArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:health.storeArry];
            NSLog(@"%lu",(unsigned long)array.count);
            for (NSDate * str in array) {
                NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
                dateFormatter.timeZone = [NSTimeZone localTimeZone];
                dateFormatter.timeStyle = NSDateFormatterShortStyle;
                NSString * dateTimeString = [dateFormatter stringFromDate:str];

                NSString* str=dateTimeString;
                NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:str];

                [attrString addAttribute: NSFontAttributeName value:  [UIFont fontWithName:@"Helvetica" size:15] range: NSMakeRange(str.length-2,2)];
                NSLog(@"%@",attrString);

                [attrString appendAttributedString:attrString];

}

Это мой код. Я обнаружил анкеты двух или трех атрибутов строк, но у меня есть массив, в котором x число объектов nsdate. Я хочу объединить их все в одну строку. Как я могу этого добиться? благодаря

1
Muhammad Salman 15 Апр 2016 в 11:04

2 ответа

Лучший ответ

Ваша проблема в том, что вы каждый раз создавали новый NSMutableAttributedString. Вам нужно вынести его за пределы цикла for.

NSMutableArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:health.storeArry];
NSLog(@"%lu",(unsigned long)array.count);

NSMutableAttributedString *finalAttributedString = [NSMutableAttributedString alloc] init];

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.timeZone = [NSTimeZone localTimeZone];
dateFormatter.timeStyle = NSDateFormatterShortStyle;

for (NSDate *str in array) {

    NSString *dateTimeString = [dateFormatter stringFromDate:str];

    NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:dateTimeString];

    [attrString addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"Helvetica" size:15] range:NSMakeRange(str.length-2,2)];
     NSLog(@"%@",attrString);

    [finalAttributedString appendAttributedString:attrString];

}
//Here, you can read the finalAttributedString

Не относящийся к делу совет: вам следует выделить / инициализировать NSDateFormatter вне цикла for. Он всегда один и тот же, плюс alloc / init из NSDateFormatter потребляет.

0
Larme 15 Апр 2016 в 08:53

Сделай что-нибудь подобное,

NSArray *arr = [NSArray arrayWithObjects:@"one",@"two",@"three", nil];
NSMutableString *str = [[NSMutableString alloc]init];

for (int i = 0; i < arr.count; i++) {

    str = [str stringByAppendingString:[arr objectAtIndex:i]];

}
NSLog(@"final str is %@",str);

Надеюсь, это поможет :)

Обновить :

Вы можете преобразовать в NSString, например,

NSString *str1 =  [NSString stringWithFormat:@"%@", nsattributedstring];

А затем вы можете добавить его. поэтому возьмите атрибутивную строку из массива, преобразуйте ее в nsstring и добавьте ее.

0
Ketan Parmar 15 Апр 2016 в 08:26