2013-06-22 4 views
-3

Так выглядит мой стол. TableViewИзображение ячейки таблицы исчезает при прокрутке

вот мой код Это то, что происходит, когда я прокручиваю вниз Image with bug ViewController.h

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController<UITableViewDataSource,UITableViewDelegate> 

{ 
    NSMutableArray *items ; 

} 
@property (nonatomic,retain) NSMutableArray *items ; 
@end 

ViewController.m

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 
@synthesize items; 
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    items = [[NSMutableArray alloc] init]; 
    [items addObject:@"bla bla bla"]; 
    [items addObject:@"rikifhdif bla bla"]; 
    [items addObject:@"bla sdfkndskfnlk bla"]; 
    [items addObject:@"sdf,nsdmf bla bla"]; 
    [items addObject:@"sdjkfhksd bla bla"]; 
    [items addObject:@"dkfhkusd bla bla"]; 
    [items addObject:@"bla sdfjknskdjf bla"]; 
    [items addObject:@"kiidrfjifig jjojdjfgdfgjjdjsjkhksidfl"]; 
    [items addObject:@"mksjdhf ysdgjg bla"]; 
    // Do any additional setup after loading the view, typically from a nib. 
} 
#pragma tableview logic 
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 6; 
} 
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 
{ 
    if(section == 0) 
    { 
     return @"Title0"; 
    } 
    else if(section == 1) 
    { 
     return @"Title1"; 
    } 
    else if(section == 2) 
    { 
     return @"Title2"; 
    } 
    if(section == 3) 
    { 
     return @"Title3"; 
    } 
    else if(section == 4) 
    { 
     return @"Title4"; 
    } 
    else 
    { 
     return @"Title5"; 
    } 
    } 
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    if (section==0) { 
     return 3; 
    } 
    if (section==1) { 
     return 1; 
    } 
    if (section==2) { 
     return 2; 
    } 
    if (section==3) { 
     return 2; 
    } 
    if (section==4) { 
     return 1; 
    } 
    if (section==5) { 
     return 1; 
    } 

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 
    cell.textLabel.text = [items objectAtIndex:indexPath.row]; 
    cell.imageView.image = [UIImage imageNamed:@"Star.jpg"]; 
    switch (indexPath.section) { 
     case 0: 

      if (indexPath.row==1) { 
       [[cell imageView] setHidden:YES]; 
      } 
      if (indexPath.row==2) { 
       [[cell imageView] setHidden:YES]; 
      } 

      break; 
     case 1: 
      if (indexPath.row==1) { 
       [[cell imageView] setHidden:YES]; 

      } 
      if (indexPath.row==2) { 
       [[cell imageView] setHidden:YES]; 
      } 
      break; 
     case 2: 
      if (indexPath.row==1) { 
       [[cell imageView] setHidden:YES]; 

      } 
      if (indexPath.row==2) { 
       [[cell imageView] setHidden:YES]; 
      } 
      break; 
     case 3: 
      if (indexPath.row==1) { 
       [[cell imageView] setHidden:YES]; 
      } 
      if (indexPath.row==2) { 
       [[cell imageView] setHidden:YES]; 
      } 
      break; 
     case 4: 
      if (indexPath.row==1) { 
       [[cell imageView] setHidden:YES]; 
      } 
      if (indexPath.row==2) { 
       [[cell imageView] setHidden:YES]; 
      } 
      break; 
     case 5: 
      if (indexPath.row==1) { 
       [[cell imageView] setHidden:YES]; 
      } 
      if (indexPath.row==2) { 
       [[cell imageView] setHidden:YES]; 
      } 
      break; 

     default: 
      break; 
    } 

    return cell; 
    //} 
} 

- (void)dealloc { 
    [items release], items = nil; 
    [super dealloc]; 
} 
- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

@end 

Просто хочу показать изображение для первой строки каждого раздел. Выходной сигнал работает в момент загрузки, но когда я просматриваю представление, первое изображение исчезает. Как исправить эту проблему? Любая помощь будет оценена по достоинству. Спасибо заранее.

+0

В коде не указано, что вы их скрываете? –

+0

YEs Это то, чего я хочу достичь. просто хочу показать изображение для первой строки. – MayurCM

+0

@KhanhNguyen Я не знаю y, но некоторые из текстового содержимого отсутствовали, что Y это замешательство произошло. Извини за это. – MayurCM

ответ

2

вы уже установленные изображения скрыть для Index-Path.row, как: -

Например, раздел One установить if (indexPath.row==1) { [[cell imageView] setHidden:YES];} так же, как и if (indexPath.row==2), поэтому ваш раздел один дисплей только первый 0th индекс строки изображения появляются другие не отображаются ,

case 0: 

    if (indexPath.row==0) { 
     [[cell imageView] setHidden:NO]; 
    } 
    else{ 
     [[cell imageView] setHidden:YES]; 
    } 

просто заменить cellForRowAtIndexPath код с моим сильфона cellForRowAtIndexPath методом

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSString *CellIdentifier = [NSString stringWithFormat:@"%d_%d",indexPath.section,indexPath.row]; //uniq identifire for each section with it's row 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    switch (indexPath.section) { 
     case 0: 
      cell.textLabel.text = [items objectAtIndex:indexPath.row]; 
      cell.imageView.image = [UIImage imageNamed:@"Star.jpg"]; 

      if (indexPath.row==0) { 
       [[cell imageView] setHidden:NO]; 
      } 
      else { 
       [[cell imageView] setHidden:YES]; 
      } 

      break; 
     case 1: 
      cell.textLabel.text = [items objectAtIndex:indexPath.row]; 
      cell.imageView.image = [UIImage imageNamed:@"Star.jpg"]; 

      if (indexPath.row==0) { 
       [[cell imageView] setHidden:NO]; 
      } 
      else { 
       [[cell imageView] setHidden:YES]; 
      } 
      break; 
     case 2: 

       cell.textLabel.text = [items objectAtIndex:indexPath.row]; 
       cell.imageView.image = [UIImage imageNamed:@"Star.jpg"]; 

      if (indexPath.row==0) { 
       [[cell imageView] setHidden:NO]; 
      } 
      else { 
       [[cell imageView] setHidden:YES]; 
      } 
      break; 
     case 3: 

      cell.textLabel.text = [items objectAtIndex:indexPath.row]; 
       cell.imageView.image = [UIImage imageNamed:@"Star.jpg"]; 

      if (indexPath.row==0) { 
       [[cell imageView] setHidden:NO]; 
      } 
      else { 
       [[cell imageView] setHidden:YES]; 
      } 
      break; 
     case 4: 

      cell.textLabel.text = [items objectAtIndex:indexPath.row]; 
      cell.imageView.image = [UIImage imageNamed:@"Star.jpg"]; 
      if (indexPath.row==0) { 
       [[cell imageView] setHidden:NO]; 
      } 
      else { 
       [[cell imageView] setHidden:YES]; 
      } 
      break; 
     case 5: 

      cell.textLabel.text = [items objectAtIndex:indexPath.row]; 
      cell.imageView.image = [UIImage imageNamed:@"Star.jpg"]; 

      if (indexPath.row==0) { 
       [[cell imageView] setHidden:NO]; 
      } 
      else { 
       [[cell imageView] setHidden:YES]; 
      } 
      break; 

     default: 
      break; 
    } 

    return cell; 
    //} 
} 

создать CellIdentifier как это: -

NSString *CellIdentifier = [NSString stringWithFormat:@"%d_%d",indexPath.section,indexPath.row]; //uniq identifire for each section with it's row 
+0

Но это то, чего я хочу достичь, поскольку я сказал, что просто хочу показать изображение для первой строки, а не для остальных строк. – MayurCM

+0

. Для вашего типа информации индекс sir начинался с 0, а не с 1, и если вы хотите достичь этого то что произойдет с появлением или нет Появляется ...? –

+0

Да, я знаю, что каждый массив начинается с индекса 0. Но я хочу показать изображение для индекса 0 и хочу скрыть остальную часть изображений. – MayurCM

0

таблица вид ячейки загрузки ячейки, когда появляются, просто ты добавить этот код все случаи 0: 10 кейс 5:

if (indexPath.row==0) { 
       [[cell imageView] setHidden:NO]; 
      } 

мой sugession вы уменьшаете свой код, как это для всего корпуса:

if (indexPath.row==0) { 
      [[cell imageView] setHidden:NO]; 
     } 
     else { 
      [[cell imageView] setHidden:YES]; 
     } 
3

Ваши изображения исчезают, как вы прокрутите вниз, потому что UITableView повторно его клетки. Скажем, для строки 1-й секции, вы просили клетки, и сделал его образ скрыт

case 0: 
    if (indexPath.row==1) { 
     [[cell imageView] setHidden:YES]; 
    } 

Теперь позже, когда вы прокрутите вниз, UITableView умна прийти, чтобы знать, что клетка больше не используется (как он больше не виден на экране), и это повторное использование ячейка для новых строк, отображаемых вниз. И поскольку вы скрыли изображение, оно скрыто. Ключевым моментом здесь является то, что новые ячейки не создаются, а старые ячейки повторно используются, а их состояния не изменяются.

Чтобы это исправить, просто добавьте случай для row == 0:

case 0: 
    if (indexPath.row==0) { 
     [[cell imageView] setHidden:NO]; 
    } 
    else if (indexPath.row == 1) { 
     [[cell imageView] setHidden:YES]; 
    } 
    else ... 

Я предлагаю четкий синтаксис:

case 0: 
    cell.imageView.hidden = indexPath.row != 0; 

Или, если вы хотите изображений только для всех первого ряда все разделы:

cell.imageView.hidden = indexPath.row != 0 // No need of case expression 
+0

для первой строки каждого раздела, 'indexPath.row' всегда' 0', независимо от раздела –

+0

Что вы имеете в виду «НЕТ для каждого раздела»? Заголовки разделов не являются ячейками, кстати ... –

+0

Я просто поговорю о разделе, укажите случай, например, случай 0: 1 и т. Д. –

-1

Я решил это, сделав следующее изменение. Но я не уверен, что это правильно или нет.

//if(cell == nil) 
//{ 


    //} 

То, что я сделал, - это комментарий к состоянию ячейки, который проверяет, является ли ячейка нулевой.