【问题标题】:dynamic UItableviewcell still show placeholder text动态 UItableviewcell 仍然显示占位符文本
【发布时间】:2020-10-27 06:23:10
【问题描述】:

我在静态单元格中嵌入了一个动态 UITableView。

我还根据这个问题的答案创建了一个新的数据源:Swift: TableView within Static UITableViewCell

我的问题是动态 UITableViewcell 的数据没有加载数据并保持显示占位符名称。你能帮我理解为什么吗?

主视图控制器

class CreateCompanyTableViewController: UITableViewController {
@IBOutlet weak var lblNumberOfUser: UILabel!
var newStakeholders: [ReadOrganizationStakeholder] = []
private lazy var dataSource = NewUserDataSource(newStakeholders: self.newStakeholders)

@IBOutlet weak var companyUsersTableView: UITableView!

override func viewDidLoad() {
   
    super.viewDidLoad()
    lblNumberOfUser.text = "\(newStakeholders.count) Users"
    companyUsersTableView.dataSource = dataSource
    companyUsersTableView.delegate = dataSource
    companyUsersTableView.reloadData()
}

override func viewDidAppear(_ animated: Bool) {
    lblNumberOfUser.text = "\(newStakeholders.count) Users"
    companyUsersTableView.reloadData()
}

@IBAction func addNewUser(_ sender: Any) {
    performSegue(withIdentifier: "segueAddNewUsers", sender: sender)
}

@IBAction func unwindFromSelectSubUsertoAddUserCompany(_ sender: UIStoryboardSegue){
    if  let senderVC = sender.source as? NewUserForCompanyTableViewController{
        print(senderVC.newStakeholder!)
        var newuser = senderVC.newStakeholder!
        dataSource.newStakeholders.append(newuser)
        companyUsersTableView.reloadData()
    }
}

}

class NewUserDataSource: NSObject, UITableViewDataSource ,UITableViewDelegate{
    // We keep this public and mutable, to enable our data
    // source to be updated as new data comes in.
    var newStakeholders: [ReadOrganizationStakeholder]
    
    init(newStakeholders: [ReadOrganizationStakeholder]) {
        self.newStakeholders = newStakeholders
    }
    
    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }
    func tableView(_ tableView: UITableView,
                   numberOfRowsInSection section: Int) -> Int {
        return newStakeholders.count
    }
    
    func tableView(_ tableView: UITableView,
                   cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let stakeholders = newStakeholders[indexPath.row]
        let cell = tableView.dequeueReusableCell(
            withIdentifier: "newUserTableViewCell",
            for: indexPath
            ) as! NewUserTableViewCell
        
        cell.setlblUsername(stakeholders.fullName)
        cell.setlblEmail(stakeholders.emailAddress!)
        
        return cell
    }
}

【问题讨论】:

  • 请检查委托方法是否被调用?
  • 请在您的视图控制器中设置委托表视图
  • 我已经设置了委托tableview

标签: ios swift uitableview datasource


【解决方案1】:

好像你的数据是空的:

    var newStakeholders: [ReadOrganizationStakeholder] = []

你评论过这个:

       // let dataSource = NewUserDataSource(newStakeholders: self.newStakeholders)

所以为空,返回 0

 func tableView(_ tableView: UITableView,
                   numberOfRowsInSection section: Int) -> Int {
        return newStakeholders.count
    }

请在此处设置断点并进行调试

【讨论】:

  • 当我创建新用户但分配给标签不起作用时,我的 show newStakeholders.count 为 1?
  • viewDidLoad 中似乎您正试图在第一次创建dataSource 之前在标签中打印(lazy 表示在您访问之前不会初始化)。然后,您访问它,但 newStakeholders 已设置为 [] 并且您在 viewDidLoad 中打印该空计数。
  • 要么将 `lblNumberOfUser.text = "(newStakeholders.count) Users"` 移动到 viewDidLoad 的底部,要么删除 lazy 属性
  • 如果我删除惰性,我会得到错误“类型的值'(CreateCompanyTableViewController)->()-> CreateCompanyTableViewController'没有成员'newStakeholders'”
猜你喜欢
  • 1970-01-01
  • 2016-09-14
  • 2020-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-02
  • 2014-08-08
  • 2019-03-28
相关资源
最近更新 更多