2011-05-10 140 views
2

我改變這樣的UITableViewCellStyleSubtitle背景:設置UITableViewCell的自定義背景PNG

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    [...] 
    NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"bgCellNormal" ofType:@"png"]; 
    cell.backgroundView = [[[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:imagePath]] autorelease]; 
    [...] 
    return cell; 
} 

我想知道是否有更好的方法來做到這一點,而無需使用這麼多的頁頭和自動釋放? 我的觀點是優化這些uitableview中的內存!

感謝您的幫助!

Kheraud

回答

7

您不應該從tableView:cellForRowAtIndexPath:訪問或設置backgroundView屬性。框架可能還沒有實例化,它可能會替代它在你的腳下。在這方面,分組和普通表格視圖的行爲會有所不同,所以任何新的未來風格都會有所不同。

背景視圖應設置爲& /定製於tableView:willDisplayCell:forRowAtIndexPath:。在第一次顯示呼叫之前調用此方法。如果你喜歡,你可以用它來完全替換背景。我用這種方式做這樣的事情:

-(void) tableView:(UITableView*)tableView 
    willDisplayCell:(UITableViewCell*)cell 
forRowAtIndexPath:(NSIndexPath*)indexPath; 
{ 
    static UIImage* bgImage = nil; 
    if (bgImage == nil) { 
     bgImage = [[UIImage imageNamed:@"myimage.png"] retain]; 
    } 
    cell.backgroundView = [[[UIImageView alloc] initWithImage:bgImage] autorelease]; 
} 
0
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    [...] 
    UIImageView *bgImage = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bgCellNormal.png"]]; 
    cell.backgroundView = bgImage; 
    bgImage release]; 
    [...] 
    return cell; 
} 
0

可以使用榫文件通過繼承的UITableView Cell類來設置單元格的背景圖像。

否則,您可以如果您使用reuseIdentifier重用細胞,那麼你不會真的被分配內存這麼多次被

UIImageView *imageView = [UIImageView alloc] initWithImage:[UIImage imageNamed:@"bgCellNormal.png"]; 
cell. backgroundView = imageView; 
[imageView release]; 
2

刪除自動釋放對象。另外,如果你的png文件被添加到你的項目中,那麼你可以調用[UIImage imageNamed:@「bgCellNormal.png」來代替。

UIImage imageNamed函數緩存圖像以提供優化。

相關問題