2012-03-05 35 views
0

我有一個繼承UITableViewCell類的自定義類,如果圖像不可用,該類將顯示圖像(標題左側)或通用深色方形。下面的代碼顯示了淺色格背景黑暗方:如何在UITableCellView中設置imageView屬性以僅顯示背景色?

imageView = [[UIImageView alloc] initWithFrame:CGRectMake(11, 6, 40, 40)]; 
[imageView setBackgroundColor:kBackgroundGreyColour]; 
[cell.contentView addSubview:imageView]; 

然而,而是在每個表格單元創建自定義子視圖我寧願喜歡使用通用UITableViewCell類的現有ImageView的財產,按照上面的代碼修改它以顯示廣場。這就是我想在這一刻:

UIImageView* iv = [[UIImageView alloc] initWithFrame:CGRectMake(11, 6, 40, 40)]; 
[iv setBackgroundColor:[UIColor redColor]]; 
self.imageView.hidden = NO; 
self.imageView.opaque = iv.opaque; 
self.imageView.alpha = iv.alpha; 
self.imageView.image = iv.image; 
[self bringSubviewToFront:self.imageView]; 
[self.imageView setBackgroundColor:[UIColor redColor]]; 

我將所有這些線爲許多現有UIImageView屬性設置爲在第一個代碼段創建UIImageView實例相同的價值觀,然而第二代碼片段不顯示任何黑色方塊。它根本不顯示任何內容,單元看起來像只有淺色背景,沒有可見的圖像視圖。但是我發現imageView屬性不是零,所以在第二個代碼片段中執行所有這些代碼行應該顯示一些內容?

然而,只要我分配一個新的圖像到ImageView的屬性(例如self.imageView.image = [[UIImage的頁頭] INIT ...],方形示出了沒有問題的分配圖像。

編輯:只是注意的是,在第二種情況下,我設定layoutSubview功能的ImageView的框架,如:

-(void)layoutSubviews 
{ 
    [super layoutSubviews]; 
    self.imageView.frame = CGRectMake(11, 6, 40, 40); 
} 

所以我的問題是: 1.哪些現有的ImageView的財產,我需要的性能設置並設置爲什麼值,以便代碼顯示一個填充了特定顏色的正方形(如代碼doe的第一個代碼段S)?

  • 是否有使得它僅示出了不與它相關聯的任何圖像的背景色(和我可以使用設置imageView.image屬性創建UIImage編程的方式以顯示該顏色)。

  • 是否有可能取代現有的ImageView酒店爲UITableViewCell類的自定義視圖不添加自定義子視圖(如第一個代碼片斷一樣),這樣我就可以顯示出與背景顏色的佔位符的UIView當圖像不可用?

  • 回答

    2

    爲什麼你的代碼不工作的原因,是你猜對;因爲當您設置ImageView的背景顏色時,它不會在圖像屬性上創建任何內容。
    而且,您已經發現無法直接設置單元格的imageview屬性。

    我會說你最好的選擇,是前者的選擇;以編程方式創建UIImage。 雖然,我強烈建議在您最喜歡的圖像編輯軟件中創建一個,然後將其包含在軟件包中。它可以在以後輕鬆更換,因爲您可以獲得更好的圖像,並且幾乎無需替換代碼和工作量。

    但是,如果您仍然希望以編程方式完成所有操作,則不會像您期望的那麼簡單。

    CGRect rect = CGRectMake(11, 6, 40, 40); 
    UIGraphicsBeginImageContext(rect.size); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    
    CGContextSetFillColorWithColor(context, [kBackgroundGreyColour CGColor]); 
    CGContextFillRect(context, rect); 
    
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    
    self.imageview.image = image; 
    

    應該做的伎倆。
    這定義了圖像大小,創建了一個圖形上下文(將其視爲畫布),選擇要使用的灰色顏色,用畫筆繪製畫布,然後將其掃描到您的計算機中,使其成爲您想要的小尺寸。

    這個小綠色小鬼在屏幕後面全部顯示(對不起,太多的特里普拉切特)。

    +0

    非常好!感謝您確認我的懷疑,並以編程方式創建它。然而,還有一個解決方案,即:用背景色創建UIImageView並將其添加爲子視圖(就像在我的第一個代碼片段中一樣),然後最終從超級視圖中刪除並且僅在設置imageView時刪除(設置爲零)。圖像屬性。雖然,我不確定這是否會比您在所有單元格中重複使用相同的佔位符圖像更有效率。 – Amiramix 2012-03-05 13:02:51

    +0

    如果你想這樣做,不需要UIImageView的所有開銷。 UIView具有您需要的所有背景顏色屬性/方法。但是如果你使用子視圖,你必須管理它的所有運動,內存,自動調整等。 如果你將一個自定義圖像放入UITableViewCell的imageview中,那麼該單元可以自己處理所有的顯示,而無需太多工作。當然,除非你想要靈活性......? – Tim 2012-03-05 20:25:09

    +0

    實際上,正方形背景只是一張照片的佔位符,所以我不需要移動它,也不需要調整大小,也不需要做任何其他花哨的管理。關於UIImageView的開銷,我在imageView屬性中添加了佔位符,該屬性需要UIImageView。這樣我就不需要在每個單元格中管理額外的子視圖和屬性。 – Amiramix 2012-03-07 17:17:07

    相關問題