2015-05-28 3 views
2

я пытался окрасить альтернативный TableCell в табличном представлении с помощью этого link to color cell с этим кодом:Цветной альтернативный UITableViewCell в UITableView?

func colorForIndex(index: Int) -> UIColor 
{ 

    let itemCount = stnRepos.count - 1 
    let color = (CGFloat(index)/CGFloat(itemCount)) * 0.6 
    return UIColor(red: 0.80, green: color, blue: 0.0, alpha: 1.0) 
} 

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, 
    forRowAtIndexPath indexPath: NSIndexPath) 
{ 
     var count = stnRepos.count 
     for (var i = 0; i<=count; i++) 
     { 
      if (i % 2 == 0) 
      { 
       cell.backgroundColor = colorForIndex(indexPath.row) 
       println(i) 
      } 
     } 
} 

, но в конечном итоге окрашивания все ячейки, как показано в ссылке.

+1

вполне очевидна. Каков ваш счет? для цикла будет цикл от 0 до счета. и даже если он войдет, если ячейка будет окрашена. вам нужно проверить логику. –

+0

stnRepos - это мой массив, и я назначаю длину массива переменной count .. !! –

ответ

8

Я не уверен, если я понимаю, что вы пытаетесь сделать, но, код ниже будет только цвет (с помощью функции) четной ячейки и красок в белом нечетных

func colorForIndex(index: Int) -> UIColor 
{ 
    let itemCount = stnRepos.count - 1 
    let color = (CGFloat(index)/CGFloat(itemCount)) * 0.6 
    return UIColor(red: 0.80, green: color, blue: 0.0, alpha: 1.0) 
} 

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, 
    forRowAtIndexPath indexPath: NSIndexPath) 
{   
    if (indexPath.row % 2 == 0) 
    { 
     cell.backgroundColor = colorForIndex(indexPath.row) 
    } else { 
     cell.backgroundColor = UIColor.whiteColor()() 
    } 
} 

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

+0

Спасибо, что это работает ... !! Я просто положил какой-то другой цвет в другую часть, теперь он выглядит намного лучше .. !! –

+0

@IrshadQureshi Отличные новости! Удачи с вашим приложением! – Icaro

1

Проблема с вашим кодом в том, что у вас есть одна ячейка, которую вы окрашиваете stnRepos.count раз. Вы должны изменить свой код, чтобы что-то вроде этого:

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, 
    forRowAtIndexPath indexPath: NSIndexPath) 
{ 
    if (indexPath.row % 2 == 0) 
    { 
     cell.backgroundColor = colorForIndex(indexPath.row) 
    } 
    else 
    { 
     cell.backgroundColor = UIColor.whiteColor() 
    } 
} 

Edit: Добавлена ​​else случай, как упомянуто @IcaroNZ сохранить ожидаемое поведение, даже если клетки

из очереди
+0

Превосходно .. !!! работал отлично ... !!! Получил то, что мне нужно ... !!! Благодаря...!!! Я завершил сегодня все мои голоса, но завтра я обязательно верну этот ответ ... !! –

+2

@ IrshadQureshi не забывайте, что если вы снимаете ячейки, вам нужно перекрасить ячейку из инструкции if, поскольку ячейка многократного использования имеет старые настройки, сохраненные на ней. – Icaro

1

Просто чтобы убедиться, что .. .

Вы пытаетесь создать стиль табличного представления, чтобы нечетные строки имели один цвет фона и даже строки имели другой?

Если это так, то, возможно, это может помочь вам:

Change color of alternate row in UITableView for iPhone SDK

Что касается вашего кода, и почему он ведет себя так, как это делает ...

- tableView:willDisplayCell:forTableColumn:row: 

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

В каждом из этих вызовов вы просматриваете весь массив, и если текущее значение i равно, вы окрашиваете фон своей ячейки таблицы, а это означает, что когда i равно 0, вы будете окрашивать свой фон, когда я 2 вы делаете то же самое, и вы делаете это для каждой строки ... это, вероятно, не то, что вас интересует :-)

Как предлагает Питер Тутервай, вы должны проверить, является ли tableColumn нечетным или четным и действует что

0
func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, 
    forRowAtIndexPath indexPath: NSIndexPath) 
    {   
if (indexPath.row % 2 == 0) 
{ 
    cell.backgroundColor = UIColor.gray 
} else { 
    cell.backgroundColor = UIColor.white 
} 

}

0

попробуйте изменить

cell.backgroundColor = colorForIndex(indexPath.row) 

Для

cell.contentView.backgroundColor = colorForIndex(indexPath.row) 
Смежные вопросы