2014-01-07 3 views
0

У меня есть UITableView, в котором я хочу добавить фоновое изображение на первую ячейку в методе viewDidLoad, после добавления изображения в первую ячейку, когда пользователь выбирает любую другую строку, я хочу скрыть свое фоновое изображение.Скрыть отображение UITableViewCell background

Это можно сделать?

Пожалуйста, помогите и заблаговременно.

Edit:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath*)indexPath{ 
    if(indexPath.row==0){ 
     cell.backgroundView = [ [UIImageView alloc] initWithImage:[[UIImage imageNamed:@"active-tab.png"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0] ]; 
       flag=true; 
     NSLog(@"willDisplayCell"); 
    } 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (flag==true) { 
     cell.backgroundView = nil; //How to get `cell` here ? 
     //How to remove BGImage from first cell ??? 
    } 
} 
+1

Вы должны включить больше кода, чтобы я t легко для людей, чтобы увидеть, как вы пытаетесь это сделать, а не гадать –

+0

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

+0

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

ответ

1

Взгляните на этот вопрос, а второй ответ дает большое описание.

Короче говоря, вы не должны использовать viewDiLoad обратного вызова, но вместо этого

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { ... } 

Здесь вы можете настроить фон каждой ячейки, как вы хотите, просто перезагрузить строку, когда пользователь щелкает.

How to customize the background color of a UITableViewCell?

EDIT

Теперь, потому что вы добавили свой код я могу ясно видеть проблему:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
static NSString *CellIdentifier = @"BTSTicketsCellIdentifier"; 
    CRHomeCategCell *cell = (CRHomeCategCell *)[_tblCateg dequeueReusableCellWithIdentifier:CellIdentifier]; 
    cell.backgroundView = nil; 

} 

Это не делает то, что вы думаете, что он делает. dequeueReusableCellWithIdentifier:CellIdentifier дает вам новый экземпляр ячейки, основанный на идентификаторе, идентифицированном идентификатором.

Вы не получаете ссылку на строку здесь, вы создаете новую строку и устанавливаете ее фон на нуль.

Ваш код должен быть чем-то больше, как это:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath*)indexPath{ 
    if(indexPath.row==0){ 
     if(cell.backgroundView == nil) 
     { 
      cell.backgroundView = [ [UIImageView alloc] initWithImage:[ [UIImage imageNamed:@"active-tab.png"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0] ]; 
      NSLog(@"willDisplayCell"); 
     } 
     else 
     { 
      cell.backgroundView = nil; 
      NSLog(@"willHideCell"); 
     } 

    } 
} 

Это не большое решение, я лично бы сделать что-то еще, как с этим пользовательские ячейки провести логическое и переключить его состояние и проверьте. Но это зависит от вас, чтобы развиваться, это общая идея о том, как она должна работать.

EDIT 2:

Поскольку вы решили запустить его в didSelectRowAtIndexPath, а также полностью не в состоянии делать какие-либо уровень исследований или сдачи каких-либо усилий в свою работу я мог бы предложить метод:

tableView cellForRowAtIndexPath:<#(NSIndexPath *)#> 
+0

'willDisplayCell' добавит изображение в первую ячейку, но как чтобы удалить это изображение, когда пользователь выбирает другую строку. – Krunal

+0

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

+0

Как перезагрузить ячейку? – Krunal

0

работает добавить просмотр таблицы делегатов в классе

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath 
    *)indexPath 
    { 

    if((indexPath.row)==0) { 
     cell.backgroundView = [ [UIImageView alloc] initWithImage:[ [UIImage imageNamed:@"normal.png"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0] ]; 
    } 

    } 


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

yourcustomcell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
      cell.backgroundView = [ [UIImageView alloc] initWithImage:[ [UIImage imageNamed:@"pressed.png"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0] ]; 

or 

     cell.backgroundView = nil; 

[tableview reloadData]; 

    } 
+0

Как получить 'cell' в' didSelectRowAtIndexPath'? – Krunal

+0

UITableViewCell * cell = [tableView cellForRowAtIndexPath: indexPath]; @Krunal – codercat

+0

я это написал, но не помогает, у меня есть собственный UITablviewCell, '- (Недействительными) Tableview: (UITableView *) Tableview didSelectRowAtIndexPath: (NSIndexPath *) indexPath { UITableViewCell * ячейка = [Tableview cellForRowAtIndexPath: indexPath ]; cell.backgroundView = nil; } ' – Krunal

Смежные вопросы