2009-09-28 2 views
24

Мне нужно изменить выбранный по умолчанию синий цвет в виде таблицы на какой-то пользовательский цвет. Есть ли способ сделать это. Помогите мнеНужно изменить цвет выбора вида таблицы

+12

Я думаю, что у вас были бы лучшие результаты, если бы вы добавили еще больше восклицательных знаков ... –

ответ

62

Лучший способ сделать это так:

// Customize the appearance of table view cells. 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CellIdentifier = @"myCellId"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
     UIView *v = [[[UIView alloc] init] autorelease]; 
     v.backgroundColor = [UIColor redColor]; 
     cell.selectedBackgroundView = v; 
    } 
    // Set up the cell... 
    cell.textLabel.text = @"foo"; 
    return cell; 
} 

Соответствующая часть для вас инструкция cell.selectedBackgroundView = v;. Вы можете заменить самый простой вид 'v' здесь любым видом, который вам нравится.

+1

Zoran, я проверил, что этот подход работает для представлений в виде таблицы, но он не работает для моих сгруппированных. Любое обходное решение? Или вы можете это подтвердить? –

+0

Это не зависит от типа табличного вида: я только что обнаружил, что он работает на некоторых простых таблицах и не на других простых таблицах. Все они используют пользовательские ячейки таблицы. –

+1

Это работает только без пуха для просмотра столов. Для просмотра сгруппированных таблиц вам действительно нужно 4 вида для разных выбранных фонов; самый верхний, самый нижний, между двумя другими ячейками и отдельной ячейкой в ​​группе. Затем возникает боль при обновлении, вы меняете количество строк в любом сегменте. Отправьте запрос функции на bugreport.apple.com, чтобы добавить свойство selectedBackgroundGradient для iPhone OS 4.0. – PeyloW

3

Я не думаю, что вы можете использовать собственный цвет. Тем не менее, вы можете использовать следующее свойство UITableViewCell

@property(nonatomic) UITableViewCellSelectionStyle selectionStyle 

Стиль выбора является постоянным backgroundView, который определяет цвет ячейки при ее выборе. Значение по умолчанию - UITableViewCellSelectionStyleBlue. Начиная с

typedef enum { 
    UITableViewCellSelectionStyleNone, 
    UITableViewCellSelectionStyleBlue, 
    UITableViewCellSelectionStyleGray 
} UITableViewCellSelectionStyle; 

вы можете переключаться с синего на синий или на серый или на любой цвет.

+1

Если вы подклассифицируете свой UITableViewCell, вы можете выделить любой цвет. – mahboudz

+0

Как именно вы это делаете для пользовательских UITableViewCells, разработанных с IB или программно? Я имею в виду, есть ли какой-либо метод/свойство, позволяющий делать это БЕЗ повторения трюков, таких как помещение другого представления поверх ячейки? –

+0

Могу ли вы отправить мне код для подкласса UITableViewCell и выделить его с помощью пользовательского цвета. пожалуйста. – smakstr

0

Другим способом сделать это было бы перемещение в новом виде по вашей ячейке с любым цветом, который вам нужен, и непрозрачностью 50%. Вы перемещаете этот вид в ячейку, когда вы получаете -setSelected: анимированный: вызов. Когда я говорю «move», вы можете всегда иметь представление поверх своей ячейки, но просто поверните скрытый бит и включите его, как вам нужно.

6

Я также столкнулся с этой проблемой при попытке создать пользовательские выбранные представления ячеек для сгруппированной ячейки. Я решил эту проблему, создав 3 типа изображений для верхней, средней и нижней части ячейки, предполагая, что будет средняя ячейка.

NSString *imageFile; 

if (row == 0) { 
imageFile = @"highlighted_cell_top.png"; 
} else if (row == ([registeredDetailsKeys count] - 1)) { 
imageFile = @"highlighted_cell_bottom.png"; 
} else { 
imageFile = @"highlighted_cell_middle.png"; 
} 

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:imageFile]]; 

cell.selectedBackgroundView = imageView; 

Возможно, есть более простой способ, но я доволен результатом.

+0

Насколько я знаю, это именно так. См. Этот [учебник] (http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html). Вы забыли вариант «top_bottom» (когда только одна ячейка), вот и все. – Rich

3

Убедитесь, что после того, как вы заявляете в заголовке

@property(nonatomic) UITableViewCellSelectionStyle selectionStyle 

Реализовать

cell.selectionStyle = UITableViewCellSelectionStyleGray 

где UITableViewCellSelectionStyleGray может быть UITableViewCellSelectionStyleNone, UITableViewCellSelectionStyleBlue, UITableViewCellSelectionStyleGray.