2014-04-18 68 views
0

我想在用戶單擊單元格時在tableView頂部顯示單元格的backgroundView。但沒有顯示。代碼如下:爲什麼addSubview不保留視圖

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

    UIView *v = cell.backgroundView; 
    [v setBackgroundColor:[UIColor redColor]]; 
    CGRect r = [v convertRect:v.bounds toView:self.view]; 
    [self.view addSubview:v]; 
    v.frame = r; 
    cell.backgroundView = nil; 
} 

在此先感謝。

+0

這不起作用,因爲細胞是已經畫在需要重繪的屏幕才能顯示新的更改。我想你在下面有一個答案可以解決你的問題。 – sleepwalkerfx

+0

我只想將backgroundView的父視圖更改爲self.view,當單擊單元格時 – Andrew

+0

爲什麼要將單元格的背景視圖移動到單元格之外?這沒有意義。你瞄準什麼視覺效果? – jrturton

回答

0

從你的問題我明白,你想顯示單元格時用戶點擊單元格的選擇。

因爲如果你想顯示的顏色,然後改變視圖背景顏色使用表的委託功能如下

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

    cell.backgroundView = [[[UIImageView alloc] init] autorelease]; 

     if(selectedSongIndex==[indexPath row]) 
     { 
      ((UIImageView *)cell.backgroundView).image=[UIImage imageNamed:@"lineSelected.png"]; 

     } 

    cell.textLabel.backgroundColor = [UIColor clearColor]; 
    cell.detailTextLabel.backgroundColor = [UIColor clearColor]; 
} 

在這裏,我已經設置了圖像顯示選擇,但。

確保在didSelectRowAtIndexPath函數調用reload表的功能,並在此之前,設置selectedSongIndex=indexpath.row

+0

我不想在選中時突出顯示單元格。但是讓backgroundView的父視圖成爲self.view。你誤解了我,也許我沒有明確表達。現在是:當我點擊一個單元格時,它的backgroundView完全消失。 – Andrew

0

addSubview將保留看法, 但你讓視圖零cell.backgroundView = nil; 所以它的空白。

列表出來的子視圖來檢查

for (UIView *v in self.view.subviews) { 
    NSLog(@"subviews_____ %@",v); 
} 

,如果你想保持cell.backgroundView您可以使用一些深層次的副本是這樣的:

UIView *v = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:cell.backgroundView]]; 
+0

如果addSubview保留視圖,那麼cell.backgroundView = nil不應該使其成爲空白。 Self.view擁有該視圖。對? – Andrew

+0

我認爲:cell.backgroundView = nil不是指[cell.backgroundView版本]。第一個操作指針變量本身,第二個操作指針指向的內存區域。 – rotoava