![](/img/trans.png)
[英]Adding single and double tap gesture on subview of UITableViewCell
[英]adding subview in a single uitableviewcell
我面臨將UIImageView添加到單個UITableViewCell的問題。 我將這樣的子視圖添加到cellForIndexPath委托方法中,如果self.mediaTypeArray在索引:indexPath.row處包含字符串:“ Image”,則僅將其添加到單元格中
let cell = self.timelineTableView.dequeueReusableCellWithIdentifier( NSStringFromClass(ClassicCaseCell), forIndexPath: indexPath) as? ClassicCaseCell
if self.mediaTypeArray[indexPath.row] == "Image" {
let imageView = UIImageView()
imageView.frame.size = (cell?.evidenceView.frame.size)!
imageView.frame.origin = CGPointZero
imageView.image = img
cell?.evidenceView.addSubview(imageView)
}
然而,這很好用,我發現即使self.mediaTypeArray [indexPath.row]不等於“ Image”,其他兩個單元格都包含相同的imageView,我也不明白為什么。 我認為這可能與可重用的tableviewcell有關,但我仍然不明白為什么會這樣做。 請幫忙!
我感覺這是因為細胞被重復使用。
解決此問題的一種方法是重寫ClassicCaseCell
的prepareForReuse
方法,以從其evidenceView
視圖中刪除任何圖像視圖。
但是,我建議您不要以這種方式(通過委托的cellForIndexPath
方法)添加圖像視圖。 相反,您的ClassicCaseCell
應該將圖像視圖作為實例變量保存,然后可以在cellForIndexPath
進行設置。 這樣,最多只有一個。 您還可以確保在prepareForReuse
中將圖像視圖設置為nil,並確保如果未設置圖像視圖將不會出現在單元格中。
首先,不要使用其他地方建議的tag
屬性。 那是很久以前使用的技術,但是蘋果現在不鼓勵這樣做。 其次,建議您簡化生活,不要在cellForRowAtIndexPath
編程方式添加圖像視圖。 如果以編程方式添加圖像視圖,則單元重用會引入笨拙的過程來確定(a)是否需要圖像視圖; (b)是否有現有的影像視圖; (c)可能添加/刪除圖像視圖和/或獲取對現有視圖的引用。
一個非常簡單的解決方案是只具有兩個單元原型,一個具有圖像視圖,另一個不具有圖像視圖。 然后,根據媒體類型,使用適當的情節提要板標識符使單元出隊並使用它。
另一種選擇是不考慮單元中的圖像視圖,並適當地隱藏/顯示它。 接下來的挑戰是如何最好地管理兩組約束,一組約束用於圖像視圖可見時,另一組約束在圖像視圖不可見時。 您可以通過明智地選擇約束優先級,激活/停用cellForRowAtIndexPath
等中的適當約束來執行此操作。可以做到這一點,但這比上述方法麻煩,因為您僅使用兩個像元原型。
您只需要添加一次UIImageView,因此,如果再次使用該單元,則它可能已經存在。 您的問題是檢測是否已添加它。 這里有一些建議:
1)始終創建它(只是不設置圖像或隱藏它)
2)為它分配一個唯一的標簽,並在需要設置它時查找該標簽...沒有標簽,然后創建它
覆蓋tableview單元中的prepareForReuse委托,並從那里刪除imageview
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.