Ios 一个单元格中的UIViewController使用Swift同时显示两个单元格
我有相同的代码的结果是不一样的。我是斯威夫特的新手。我试过不同的方法,但都不管用。帮助解决问题并获得预期结果Ios 一个单元格中的UIViewController使用Swift同时显示两个单元格,ios,swift,Ios,Swift,我有相同的代码的结果是不一样的。我是斯威夫特的新手。我试过不同的方法,但都不管用。帮助解决问题并获得预期结果 import UIKit class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate { let arr = ["aa","bb","cc","d#d","ee","ff"] func collectionView(_ collectionV
import UIKit
class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {
let arr = ["aa","bb","cc","d#d","ee","ff"]
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return arr.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath as IndexPath) as! MyCollectionViewCell
let fullNameArr = arr[indexPath.item].split(separator: "#") as [AnyObject]
let firstName = fullNameArr as! [String]
let os = firstName.count
if (os > 1){
if os == 2{
cell.myLabel.text = firstName[0]
cell.backgroundColor = UIColor.red
}else{
cell.myLabel.text = firstName[1]
cell.backgroundColor = UIColor.blue
}
}else{
cell.myLabel.text = arr[indexPath.item]
cell.backgroundColor = UIColor.orange
}
return cell
}
}
这是它看起来的样子
下面是它最后的样子
因为您期望的是d#d=2d,但您将collectioncell的计数设置为仅1。 您可以先简单地处理数组,并保留所有代码
var arr = ["aa","bb","cc","d#d","ee","ff"] // Change let to var
// Break all x#x -> x# + x#
arr = arr.reduce([]) { (res, str) -> [String] in
var result = res
var comps = str.components(separatedBy: "#")
if comps.count > 1 {
comps = comps.map({$0 + "#"})
}
result.append(contentsOf: comps)
return result
}
请详细介绍集合视图单元格委托和数据源方法,以及它的工作原理 根据您的代码,若字符串有#值,那个么它应该被分隔,并且应该添加单元格编号 为此,请在调用tableview方法之前实现#分隔符逻辑。 始终记住,单元格将根据您在numberOfItemsInSection数据源方法中返回的项数创建 使用以下代码获取更新的阵列:-
let newArr:[String] = [String]()
for data in arr {
let numberOfStr = data.split(separator: "#") as [String]
if numberOfStr.count > 1 {
for data in numberOfStr {
newArr.append(data)
}
} else {
newArr.append(data)
}
}
与其直接使用字符串数组,不如先建立一个模型,然后求解逻辑,直接将模型数组交给collectionview来设置数据 将包含数据的模型类
class Item {
var value: String?
var isColored: Bool?
init(value: String?, isColored: Bool) {
self.value = value
self.isColored = isColored
}
}
解决上述问题的逻辑函数
func getRequiredData(_ arr: [String]) -> [Item] {
var newItems = [Item]()
arr.forEach({newItems.append(Item.init(value: $0, isColored: false))})
newItems.forEach { (item) in
if /item.value?.contains("#") {
let dividedItems = (/item.value).split(separator: "#")
dividedItems.forEach({newItems.append(Item.init(value: /String($0 ?? ""), isColored: true))})
}
}
let filteredArray = newItems.filter({!(/$0.value?.contains("#"))})
let sortedArray = filteredArray.sorted(by: { /$0.value < /$1.value })
return sortedArray
}
使用项作为数据来收集视图,并根据项的值设置单元格的颜色和值,如
cell.myLabel.text = self.items[indexPath.row].value
cell.backgroundColor = (self.items[indexPath.row].value ?? false) ? UIColor.orange : UIColor.blue
非常感谢。都坏了(如我所愿)
cell.myLabel.text = self.items[indexPath.row].value
cell.backgroundColor = (self.items[indexPath.row].value ?? false) ? UIColor.orange : UIColor.blue