簡體   English   中英

根據可用的文本或圖像內容選擇不同的UITableViewCells

[英]Choosing different UITableViewCells depending on available text or image content

我想根據可用的內容顯示不同的UITableViewCell 我該怎么做?

例:

可以說我有一個自定義UITableViewCellcontentView具有UILabelUITextFieldUIImageView作為子視圖。 所述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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM