2014-04-21 76 views
0

我想爲UITableView使用自定義accessoryView。至於accessorView我正在使用UIImageView。我面臨的問題是accessoryView只出現在最後一行UITableViewUITableView自定義accessoryView只出現在最後一個單元格

In viewDidLoad我初始化了UIImageView。

customAccessory = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 10, 15)]; 
customAccessory.image = [UIImage imageNamed:@"icon_right"]; 

cellForRowAtIndexPath我這樣做:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    MyDayCell *cell =(MyDayCell *)[self.tableView dequeueReusableCellWithIdentifier:@"MyDayCell"]; 
    if (cell == nil) { 
     NSArray *cellArray = [[NSBundle mainBundle] loadNibNamed:@"MyDayCell" owner:self options:nil]; 
     cell = [cellArray objectAtIndex:0]; 
    } 
    switch (indexPath.row) { 
     case 0: 
      cell.image.image = [UIImage imageNamed:@"icon_guide"]; 
      break; 
     case 1: 
      cell.image.image = [UIImage imageNamed:@"icon_media"]; 
      break; 
     case 2: 
      cell.image.image = [UIImage imageNamed:@"icon_lives"]; 
      break; 
     case 3: 
      cell.image.image = [UIImage imageNamed:@"icon_ask"]; 
      break; 
     case 4: 
      cell.image.image = [UIImage imageNamed:@"icon_k"]; 
      break; 
     default: 
      break; 
    } 
    cell.name.text = [dataSource objectAtIndex:indexPath.row]; 
    cell.accessoryView = customAccessory; 
    return cell; 
} 

這是截圖:

enter image description here

+0

您在所有單元格中使用了相同的對象'customAccessory',因此它將顯示在最後一個單元格中。爲每個單元創建附件視圖將解決該問題。 – Akhilrajtr

+0

是的。但爲什麼會發生?爲什麼我不能爲所有單元使用相同的accessoryView? – Rashad

+5

視圖只能有一個父級。無法同時多次顯示單個視圖實例。 – rmaddy

回答

0

還有就是customAccessory只有一個實例。你應該爲每個單元格創建UIImageView。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    MyDayCell *cell =(MyDayCell *)[self.tableView dequeueReusableCellWithIdentifier:@"MyDayCell"]; 
    if (cell == nil) { 
     NSArray *cellArray = [[NSBundle mainBundle] loadNibNamed:@"MyDayCell" owner:self options:nil]; 
     cell = [cellArray objectAtIndex:0]; 

     customAccessory = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 10, 15)]; 
     customAccessory.image = [UIImage imageNamed:@"icon_right"]; 
     cell.accessoryView = customAccessory; 

    } 

    // Here your code... 
    // An return cell 
     return cell; 
} 
1

試試這個,

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    .... 
    if (cell == nil) { 
     NSArray *cellArray = [[NSBundle mainBundle] loadNibNamed:@"MyDayCell" owner:self options:nil]; 
     cell = [cellArray objectAtIndex:0]; 
     UIImageView *customAccessoryView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 10, 15)]; 
     customAccessoryView.image = [UIImage imageNamed:@"icon_right"]; 
     cell.accessoryView = customAccessoryView; 
    } 

    .... 
} 
+0

它的工作原理,但你能解釋爲什麼會發生這種情況? – Rashad

+0

視圖只能包含在單個父視圖的層次結構中。只要將它添加到新的,它就會從前一箇中刪除。在這裏,當你將視圖添加到單元格時,它將從前一個單元格中移除。 – Akhilrajtr

2

視圖只能有一個上海華。當您將自定義視圖添加到第二個單元格時,它將從第一個單元格中移除。因此,爲每個表視圖單元格創建自定義附件視圖。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    MyDayCell *cell =(MyDayCell *)[self.tableView dequeueReusableCellWithIdentifier:@"MyDayCell"]; 
    if (cell == nil) { 
     NSArray *cellArray = [[NSBundle mainBundle] loadNibNamed:@"MyDayCell" owner:self options:nil]; 
     cell = [cellArray objectAtIndex:0]; 
    } 
    switch (indexPath.row) { 
     case 0: 
      cell.image.image = [UIImage imageNamed:@"icon_guide"]; 
      break; 
     case 1: 
      cell.image.image = [UIImage imageNamed:@"icon_media"]; 
      break; 
     case 2: 
      cell.image.image = [UIImage imageNamed:@"icon_lives"]; 
      break; 
     case 3: 
      cell.image.image = [UIImage imageNamed:@"icon_ask"]; 
      break; 
     case 4: 
      cell.image.image = [UIImage imageNamed:@"icon_k"]; 
      break; 
     default: 
      break; 
    } 
    cell.name.text = [dataSource objectAtIndex:indexPath.row]; 
    UIImageView *customAccessory = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 10, 15)]; 
    customAccessory.image = [UIImage imageNamed:@"icon_right"]; 
    cell.accessoryView = customAccessory; 
    return cell; 
} 
相關問題