Swift - 我应该在哪里设置自定义单元格的值 - CustomCell或ViewController?

时间:2018-01-28 06:39:19

标签: ios uitableview

我有一个自定义的单元类说UserDetailsCustomCell。我在这个类名称,性别,DOB,地址中有4个标签。什么是在标签中设置值的最佳位置。我应该将所有这些值传递给单元类,让单元类显示这些值,还是应该在ViewController cellForRowAtIndexPath方法中设置这些值。 什么是最好的方式和原因?

谢谢

4 个答案:

答案 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值的方法之一

示例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() numberOfItemsSingleton.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
}