2016-10-17 6 views
-2

Я хотел бы изменить цвет ячейки в каждой клетке (4 цвета% 4):IOS Изменение каждая ячейка цвета (секция + строка)

1. Раздел 1

Cell 1: RED

Cell 2: BLUE

2. Раздел 2

Cell 3: BLACK

3. Секция 3

Ячейка 4: БЕЛАЯ

4. Раздел 4

Ячейка 5: КРАСНЫЙ

Ячейка 6: СИНИЙ

сотовый 7 : BLACK ...

Как я могу это достичь?

Я знаю, как изменить цвет в cellForRow: cell.contentView.backgroundColor = [UIColor colorWithRed:119.0/255.0 green:221.0/255 blue:167.0/255 alpha:1.0f];

+0

Есть ли более 7 ячеек, или это установленная сумма? – BJHStudios

+0

@BJHStudios равно или больше или меньше 7 ячеек – Viny76

+0

Что я понял из описания вопроса, так это то, что вы хотите, чтобы цвета фона в последовательности, то есть RED, BLUE, BLACK, WHITE и так далее, независимо от раздела, не так ли? И на каком языке вы используете? – Adeel

ответ

0

Вы можете иметь переключатель случай Постулаты для решения этой проблемы

создать функцию, чтобы вернуться к вам UIColor и в качестве параметра этого метода, послать число от 0 до 3

-(UIColor *)colorForCell:(NSInteger)index { 
    switch (index) { 
       case 0: 
        return RED 
        break; 
       case 1: 
        return BLUE 
        break; 
       case 2: 
        return BLACK 
        break; 
       case 3: 
        return WHITE 
        break; 

       default: 
        return RED 
        break; 
      } 
} 

и чем просто сделать cellForRow : cell.contentView.backgroundColor = [self colorForCell:index]

+0

Не работает. Пробовал [self colorForCell: indexPath.row] -> нужно предоставить NSUInteger – Viny76

1

Я предполагаю, что у вас есть массив массивов, который хранит данные вашего раздела и строки. Я хотел бы создать функцию, которая принимает раздел и строки числа в качестве аргументов и возвращает позицию, игнорирующий раздел:

- (Int) getPosition:(Int) section rowNumber:(Int) row { 
    int position = 0; 
    for (int i = 0; i < section; i++) { 
     position += DataArray[i].count; 
    } 
    return position + row; 
} 

Это добавить бы все отсчеты в предыдущих разделах, а затем добавить строку в текущем разделе чтобы дать вам новый номер для раскраски. Затем вызвать его, записать это в методе cellForRow:

newIndex = [self getPosition:indexPath.section rowNumber:indexPath.row] 

Если использовать этот номер для определения цвета, он будет окрашен правильно.

+0

Не удалось реализовать в Objective-C – Viny76

+0

Я отредактировал свой ответ на мою лучшую попытку на объективе-c. Вы должны поместить эту функцию в свой класс tableViewController, а затем вызвать ее из метода cellForRowAt, чтобы получить абсолютный индекс независимо от раздела. –

+0

Итак, после, что я должен назвать cellForRow? – Viny76

0

Найдено решение:

NSInteger rowNumber = 0; 
for (NSInteger i = 0; i < indexPath.section; i++) { 
    rowNumber += [self.tableView numberOfRowsInSection:i]; 
} 

rowNumber += indexPath.row; 
switch (rowNumber % 4) { 
    case 0: 
     cell.contentView.backgroundColor = [UIColor blackColor]; 
     break; 
    case 1: 
     cell.contentView.backgroundColor = [UIColor redColor]; 
     break; 
    case 2: 
     cell.contentView.backgroundColor = [UIColor whiteColor]; 
     break; 
    case 3: 
     cell.contentView.backgroundColor = [UIColor yellowColor]; 
     break; 

    default: 
     break; 
} 
0

Так как вы хотите, чтобы выбрать один из четырех цветов, упомянутых в вопросе в последовательности на основе индекса/положения ячейки независимо от раздела, так это сделает для вас ,

- (UIColor *)colorForCellAtIndexPath:(NSIndexPath *)indexPath { 

UIColor *cellColor; 
NSInteger index = 0; 

for (NSInteger i=0; 1<indexPath.section; i++) { 

    index += [self.tableView numberOfRowsInSection:i]; 
} 

index += indexPath.row; 

switch (index % 4) { 

    case 0: 
     cellColor = [UIColor redColor]; 
     break; 

    case 1: 
     cellColor = [UIColor blueColor]; 
     break; 

    case 2: 
     cellColor = [UIColor blackColor]; 
     break; 

    case 3: 
     cellColor = [UIColor whiteColor]; 
     break; 

    default: 
     break; 
} 

return cellColor; 
} 

Вызов этого метода в вашем cellForRowAtIndexPath: и передать indexPath в качестве параметра.