【问题标题】:Multiple Table View with different arrays具有不同数组的多个表视图
【发布时间】:2019-07-14 18:52:07
【问题描述】:

我有一个详细视图,其中显示了活动的详细信息、参与人员和请求参与的人员。我创建了两个不同类型的数组,但它们具有相同的字段,只是第一个结构表示“status_confirm”字段等于 1 的用户(因此接受的用户),而另一个结构表示“status_confirm”等于 0(等待接受的用户)。我声明了两个数组,第一个:var arrayUserAccepted = [User_accepted] ()。 第二个:var arrayUserWaiting = [User_waiting] ()Struct Image 下一步:我通过 php 脚本填充这些结构

func getData(){
    let url = URL(string: “MYURL”)
    URLSession.shared.dataTask(with:url!, completionHandler: {(data, response, error) in
    guard let data = data, error == nil else { return }
    do {
        let json = try JSONSerialization.jsonObject(with: data, options: []) as! [String:AnyObject]
        print("JSON: \n\(json)\n")
        let waiting = json["waiting"] as! [AnyObject]
        let accepted = json["accepted"] as! [AnyObject]
        DispatchQueue.main.async {
            for list_user_waiting in waiting {
                let id_user_waiting = list_user_waiting["id_user”] as! String
                let name_user_waiting = list_user_waiting[“name_user”] as! String
                let email_user_waiting = list_user_waiting["email"] as! String
                var photo_user_waiting = list_user_waiting[“photo”]
                let status_user_waiting = list_user_waiting["status”] as! String
                if photo_user_waiting is NSNull {
                    photo_user_waiting = ""
                }
                let listUserWaiting = User_waiting(id_user_waiting: id_user_waiting, name_user_waiting: name_user_waiting, email_user_waiting: email_utente_attesa, foto_waiting: photo_user_waiting as! String, status_waiting: status_user_waiting)
                self.arrayUserWaiting.append(listUserWaiting)
                self.tableViewListUserWaiting.reloadData()
            }

            for list_user_accepted in accepted {
                let id_user_accepted = list_user_accepted["id_utente"] as! String
                let name_user_accepted = list_user_accepted["name_utente"] as! String
                let email_user_accepted = list_user_accepted["email"] as! String
                var photo_user_accepted = list_user_accepted[“photo"]
                let status_user_accepted = list_user_accepted["status”] as! String
                if photo_user_accepted is NSNull {
                    photo_user_accepted = ""
                }
                let listUserAccepted = User_accepted(id_user: id_user_accepted, nome_utente: name_user_accepted, email: email_user_accepted, foto: photo_user_accepted as! String, stato: status_user_accepted)
                self.arrayUserAccepted.append(listUserAccepted)
                self.tableViewListUserAccepted.reloadData()
            }
        }
    } catch let error as NSError {
        print(error)
    }
}).resume()}

这是我在 viewDidLoad() 中调用的函数。下一步是使用表格视图的功能,我认为这里有禁令

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    var count: Int?
    if tableView == self.tableViewListUserAccepted {
        count = arrayUserAccepted.count
    }
    if tableView == self.tableViewListUserWaiting {
        count = arrayUserWaiting.count
    }
    return count!
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell
    if tableView == self.tableViewListUserAccepted {
        cell.imageProfileUserAccepted.image = UIImage(named: "imageDefault")
        cell.valueSliderUserAccepted.value = Float(50) //JUST FOR POPULATE THE INTERFACE
        cell.name_user_accepted.text = arrayUserAccepted[indexPath.row].name_user
    } 
    if tableView == self.tableViewListUserWaiting {
        cell.imageProfileUserWaiting.image = UIImage(named: "imageDefault")
        cell.valueSliderUserWaiting.value = Float(23) //JUST FOR POPULATE THE INTERFACE
        cell.name_user_waiting.text = arrayUserWaiting[indexPath.row].name_user_waiting
    }
    return cell
}

完成这一轮后,我启动了应用程序,但什么也没有。桌子是空的。在控制台中,脚本正确回答了我,所以我无法弄清楚错误可能出在哪里。不用说,我已经在 Main.Storyboard 和代码中声明了两个表的 .delegate 和 .dataSource 。

【问题讨论】:

  • 首先,我会在其中设置一些断点并尝试追逐流程。 getData() 是进入 do{} 部分,还是出现错误并在警卫处返回?您能看到正在创建用户并将其添加到阵列中吗?顺便说一句,我会在循环之外调用 reloadData() ,但这不应该是一个错误。
  • 你是否为UITableView 设置了数据源
  • 还有一件事不要在for循环中重新加载表格视图
  • @DharmeshKheni 是的,我做到了,我将 reloadData 留在了 func getData() 中并将其写入 viewDidLoad()

标签: ios swift uitableview cocoa-touch


【解决方案1】:

一切都很好,只需更改 IF 条件的格式即可。

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    var count: Int?
    if tableView == self.tableViewListUserAccepted {
        count = arrayUserAccepted.count
    } else {
        count = arrayUserWaiting.count
    }
    return count!
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    if tableView == self.tableViewListUserAccepted {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell
        cell.imageProfileUserAccepted.image = UIImage(named: "imageDefault")
        cell.valueSliderUserAccepted.value = Float(50) //JUST FOR POPULATE THE INTERFACE
        cell.name_user_accepted.text = arrayUserAccepted[indexPath.row].name_user
        return cell
    } else {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell
        cell.imageProfileUserWaiting.image = UIImage(named: "imageDefault")
        cell.valueSliderUserWaiting.value = Float(23) //JUST FOR POPULATE THE INTERFACE
        cell.name_user_waiting.text = arrayUserWaiting[indexPath.row].name_user_waiting
        return cell
    }

}

还要检查您的tableViewdatasourcedelegate 是否已设置。在viewDidLoad() 方法中填充数组后,最后在两个表视图上调用tableView.reloadTable() 方法。

【讨论】:

  • 不,它不起作用。它让我显示空白行。我要疯了:\
  • 在填充数组后尝试将 tableViews 重新定位到 DispatchQueue 之外和 viewDidLoad() 中。
猜你喜欢
  • 2012-12-13
  • 2021-07-02
  • 2022-06-10
  • 2023-03-11
  • 2012-10-07
  • 2021-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多