[英]Choosing different UITableViewCells depending on available text or image content
我想根據可用的內容顯示不同的UITableViewCell
。 我該怎么做?
例:
可以說我有一個自定義UITableViewCell
其contentView
具有UILabel
, UITextField
和UIImageView
作為子視圖。 所述UILabel
位於電池的頂部,上述UIImageView
其旁邊UITextField
。 根據這些視圖的可用內容,我只想顯示可用的部分並放大其他視圖。 eG:如果缺少UILabel上下文,我不想在單元格的頂部留一個空格。 如果我沒有圖像,則文本字段應從單元格的最左側開始。
應該有很多報紙/電視應用程序必須解決完全相同的問題...
方法:
(i)使用相同的自定義單元格以某種方式重新排列子視圖
(ii)根據可用的內容調用不同的自定義UITableViewCell
對於這兩種方法,我都在尋找解決此問題的途徑時遇到問題。 我的UITableView
內容大小是動態的,可以有幾行或多行。
是否有其他我遺漏的方法,或者如果沒有,最好的方法是什么?
你(II)的想法是去我心中的方式。 就像您說的那樣,您設計了兩個海關UITableViewCell
(.m,.h和.xib),您不要忘記在接口Builder中定義CellIdentifier
,並且在調用委托tableView:cellForRowAtIndexPath:
,您選擇dequeueReusableCellWithIdentifier:
適當的UITableViewCell模板。
兩種方法都行得通,盡管我可能更喜歡(i) 。
對於(i) ,重用很容易。 只需確保在重用時清除舊數據,讓UITableViewCell的layoutSubviews
方法適當地布置子視圖以匹配任何可用數據,並確保在更改數據時調用setNeedsLayout
。 這樣做的好處是,您的其余代碼無需關心是否有可用數據,並且您的表甚至不必關心單元格是否突然添加了圖像(除非它需要知道該單元格)高度有所變化)。 缺點是單元的實現更加復雜,並且無法在IB中完全定義布局。
對於(ii) ,每個不同的自定義UITableViewCell類型必須具有其自己的復用reuseIdentifier
,然后使用dequeueReusableCellWithIdentifier:
並具有適用於可用數據的標識符。 這樣做的好處是單個單元格類型更簡單(並且可能可以完全在IB中完成),而缺點是,對於每種可用數據組合,您必須擁有多個單元格。 另外,如果需要更改類型,則需要讓UITableView重新加載單元格(例如,使用reloadRowsAtIndexPaths:withRowAnimation:
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.