我有一个自定义的单元类说UserDetailsCustomCell。我在这个类名称,性别,DOB,地址中有4个标签。什么是在标签中设置值的最佳位置。我应该将所有这些值传递给单元类,让单元类显示这些值,还是应该在ViewController cellForRowAtIndexPath方法中设置这些值。 什么是最好的方式和原因?
谢谢
答案 0 :(得分:0)
我建议您将您的逻辑与单元格中的单元格数据相关联。创建一个方法,用于填充单元格数据并从viewcontroller中调用它。
答案 1 :(得分:0)
我认为最好将视图逻辑封装在视图中。因此,当他们想要使用视图时,其他人不会参与其中。
例如
final class UserDetailsCustomCell: UICollectionViewCell {
var user: User! {
didSet {
guard user != nil else { return }
nameLabel.text = user.name
genderLabel.text = user.gender
addressLabel.text = user.address
dateOfBirthLabel.text = user.dateOfBirth
}
}
private @IBOutlet weak var nameLabel: UILabel!
private @IBOutlet weak var genderLabel: UILabel!
private @IBOutlet weak var dateOfBirthLabel: UILabel!
private @IBOutlet weak var addressLabel: UILabel!
}
当有人想要使用UserDetailsCustomCell时,他们不需要知道如何设置标签或任何其他视图逻辑。他们只是设置用户,而单元格为他们做其余的事情
cell.user = someUser
答案 2 :(得分:0)
首先创建objectModel来聚合数据:
prepend()
在UserDetailsCustomCell中创建dataSource var:
struct UserDetailsObjectModel {
var username: String
var gender: String
var dob: String
var address: String
}
最后在cellForItem方法中传递userDetailsObject AKA dataSource
class UserDetailsCustomCell: UICollectionViewCell {
var dataSource: UserDetailsObjectModel? {
willSet {
if let userDetails = newValue {
// do what ever u want with the user data
}
}
}
}
答案 3 :(得分:0)
这是在CustomCell
示例JSON格式
{
"studentListJSON" : [
{
"name" : "mcdonal",
"age" : "27",
"gender" : "male"
},
{
"name" : "jack",
"age" : "29",
"gender" : "male"
},
{
"name" : "rose",
"age" : "24",
"gender" : "female"
},
]
}
单身人士声明
class Singleton: NSObject {
static let sharedInstance = Singleton()
var studentListJSON = NSArray()
}
JSON解析
func JSONParsing()
{
let url = URL(string: urlString) // YOUR API URL
URLSession.shared.dataTask(with:url!) { (data, response, error) in
if error != nil {
print(error)
} else {
do {
let parsedData = try JSONSerialization.jsonObject(with: data!) as! NSDictionary
Singleton.sharedInstance.studentListJSON = parsedData.value(forKey: "studentListJSON") as! NSArray
// RELOAD CollectionView in main thread, if Singleton.sharedInstance.studentListJSON.count > 0
} catch let error as NSError {
print(error)
}
}
}.resume()
}
将JSON数组解析为Singleton.sharedInstance.studentListJSON
。然后reloadData()
numberOfItems
为Singleton.sharedInstance.studentListJSON.count
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "userDetailsCell", for: indexPath) as! UserDetailsCustomCell
let datasDict = Singleton.sharedInstance.studentListJSON[indexPath.item] as! NSDictionary
cell.name.text = datasDict.value(forKey: "name") as! String
cell.age.text = datasDict.value(forKey: "age") as! String
cell.gender.text = datasDict.value(forKey: "gender") as! String
return cell
}