2012-05-19 4 views
1

В моем проекте у меня есть tableViews со статическими ячейками, а также tableViews с динамическими ячейками. Для настройки мне удалось получить градиентный фон на ячейках (сгруппированный силот).Static UITableViewCell backgroundView

Он работает нормально с динамическими TableViews, когда я устанавливаю представление фона в cellForRowAtIndex ... в соответствии с положением строки (сверху, снизу, середине или одиночном).

Однако, когда я пытаюсь реализовать его на статических ячейках таблицы, он не работает. Я попытался реализовать cellForRowAtindex ... но он сработает.

Есть ли у кого-то идеи?

Обновление: код для cellForRow ..

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];  

    UACellBackgroundView *bgw=[[UACellBackgroundView alloc]init]; 

    if (indexPath.row==0) { 

     bgw.position = UACellBackgroundViewPositionTop; 
     cell.backgroundView=bgw; 

    }else if (indexPath.row==2){ 

     bgw.position = UACellBackgroundViewPositionBottom; 
     cell.backgroundView=bgw; 

    }else { 
     bgw.position = UACellBackgroundViewPositionMiddle; 
     cell.backgroundView=bgw; 
    } 

    // cell.backgroundView=bgw; 


    return cell; 
} 

Кстати, вид фона я получил его отсюда: http://code.coneybeare.net/how-to-make-custom-drawn-gradient-backgrounds и здесь: http://pessoal.org/blog/2009/02/25/customizing-the-background-border-colors-of-a-uitableview/

если кто-то заинтересован

+0

Сбой с чем? И вроде журнал или точки останова? – CodaFi

+0

Причина: '*** - [__ NSArrayI objectAtIndex:]: индекс 0 за пределами для пустого массива' Я думаю, что компилятор хочет, чтобы я реализовал источник данных и так далее. – Marcal

+0

Тогда неправильный код. Ищите метод -объектAtIndex. – CodaFi

ответ

1

It не похоже, что вы назначаете UITablViewCell, вам нужно выделить ячейку.

Например:

- (UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil) { 
     // alloc the UITableViewCell 
     // remeber if you are not using ARC you need to autorelease this cell 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 

    cell.textLabel.text = @"Cell Name"; 
    cell.detailTextLabel.text = @"Cell Detail"; 

    return cell; 
} 

Добавить это заявление:

if (cell == nil) { 
    // alloc the UITableViewCell 
    // remeber if you are not using ARC you need to autorelease this cell 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
} 
+1

Спасибо. Это действительно работает, но оно разрушает статическое содержимое ячейки. То, что я сделал, - создать выход для каждой статической ячейки и добавить фоновый вид в viewDidLoad. Он работает до тех пор, пока стиль ячейки установлен как «Пользовательский». – Marcal

+0

@Marcal Я не понимаю, почему вы не просто добавляете фон в ячейку для cellForRowAtIndexPath, вся цель этого метода заключается в настройке ячеек для таблицы. Просто добавьте другой фон в зависимости от того, какая ячейка это. Первый будет иметь верхний фон, последний будет иметь нижний фон, и все остальные ячейки будут иметь средний фон. – Vikings

+1

Ну, я сделал это, и он работает. Но, как я уже сказал, если я установлю это на cellForRow, статический контент, который я перетащил в ячейку в Storyboard, просто исчезает, потому что код, вероятно, перекрывает раскадровку. – Marcal

1

Если у вас есть подкласс UITableViewController с статической таблицы вы не должны пытаться клетки из очереди.
Вместо этого вы должны спросить super для соты. Суперкласс получит ячейку из раскадровки, и вы можете ее настроить.

Что-то вроде этого:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [super tableView:tableView cellForRowAtIndexPath:indexPath]; 

    UIView *selectedBackgroundView = [[UIView alloc] init]; 
    cell.selectedBackgroundView = selectedBackgroundView; 
    cell.selectedBackgroundView.backgroundColor = [UIColor mb_tableViewSelectionColor]; 
    return cell; 
} 

Работы для всех других атрибутов, а также.