Хранит UIColor как строки в NSMutableArray, но не может отобразить цвета - PullRequest
0 голосов
/ 02 мая 2018

Ниже мой NSMutableArray:

NSMutableArray *bgColorArr = [NSMutableArray arrayWithObjects:
    @"[UIColor colorWithRed:0.90 green:0.22 blue:0.21 alpha:1.0]",
    @"[UIColor colorWithRed:0.26 green:0.63 blue:0.28 alpha:1.0]",
    @"[UIColor colorWithRed:0.85 green:0.11 blue:0.38 alpha:1.0]",
    @"[UIColor colorWithRed:0.12 green:0.53 blue:0.90 alpha:1.0]",
    @"[UIColor colorWithRed:0.96 green:0.49 blue:0.00 alpha:1.0]",
    nil];

Я храню UIColors как строки по какой-то причине. Я знаю, как хранить UIColors в NSMutableArray, но мне нужно хранить их как NSString из-за моего требования. Когда я пытаюсь отобразить цвета в cellForRowAtIndexPath, используя следующий код:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *simpleTableIdentifier = .............

    cell.bgView.backgroundColor = (UIColor *)[bgColorArr objectAtIndex:indexPath.row];

    return cell;
}

Ниже приведена ошибка:

*** Завершение приложения из-за необработанного исключения 'NSInvalidArgumentException', причина: '- [__ NSCFConstantString CGColor]: нераспознанный селектор отправлен на экземпляр

Рассматривая вышеуказанную ошибку, мы можем сказать, что строка не преобразуется в UIColor. Есть ли способ отобразить UIColor, даже если он хранится в виде строки? Любая помощь будет по достоинству оценена.

Ответы [ 4 ]

0 голосов
/ 02 мая 2018

Вы можете добавить пользовательские цвета в файл Asset.xcasset следующим образом.

enter image description here enter image description here

затем загрузите ваши цвета вот так в ваш массив.

-(void)loadAllColorsFromAsset {
    NSMutableArray *array = [NSMutableArray arrayWithObjects:[UIColor colorNamed:@"redColor"],[UIColor colorNamed:@"yellowColor"],[UIColor colorNamed:@"greenColor"], nil];
}
0 голосов
/ 02 мая 2018

Вы можете попробовать сохранить значения rgb и преобразовать эти строковые значения rgb в float и поместить их в инициализатор UIColor.

0 голосов
/ 02 мая 2018

Попробуйте так.

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

#define RGBCOLOR(r,g,b)    [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1]

Затем сохраните UIColors в NSMutableArray следующим образом:

NSMutableArray *colorArray=[[NSMutableArray alloc]initWithObjects:RGBCOLOR(107, 252, 0),RGBCOLOR(64, 128, 0),RGBCOLOR(51, 128, 0),RGBCOLOR(47, 128, 0),RGBCOLOR(31, 12, 155),RGBCOLOR(47, 72, 254),RGBCOLOR(86, 0, 255),RGBCOLOR(128, 24, 255),RGBCOLOR(240, 101, 255),RGBCOLOR(240, 45, 128),RGBCOLOR(129, 19, 0),RGBCOLOR(220, 18, 3),RGBCOLOR(236, 82, 9),RGBCOLOR(235, 146, 14),RGBCOLOR(255, 255, 0),RGBCOLOR(128, 64, 0),RGBCOLOR(50, 128, 63),RGBCOLOR(12, 64, 128),     RGBCOLOR(102, 102, 255),RGBCOLOR(115, 103, 61),nil];

Теперь отобразите цвета в cellForRowAtIndexPath.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
 static NSString *CellIdentifier = @"Cell";
  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
 if (cell == nil) {
 cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
 }

 cell.bgView.backgroundColor = [colorArray objectAtIndex:indexPath.row];

 return cell;
}

это решит вашу проблему.

0 голосов
/ 02 мая 2018

Вы можете сохранить шестнадцатеричные строки в вашем массиве, а затем инициализировать UIColor с ним.

Вот несколько ссылок, которые могут оказаться полезными для работы с шестнадцатеричными строками.

Как использовать шестнадцатеричные значения цвета

Как я могу создать UIColor из шестнадцатеричной строки?

...