gpt4 book ai didi

ios - 如何将数据(从服务器获取)传递到 UIView 中的 tableView

转载 作者:行者123 更新时间:2023-11-30 12:18:34 25 4
gpt4 key购买 nike

我有一个 View Controller 。因为我有一个按钮,如果我单击该按钮,则会在该 viewController 上呈现一个 UIView。在那个 UIVew 中我有一个 tableView。现在我想将数据传递到从服务器获取的 TableView 中。我无法在 tableView 中显示数据,我保留了断点并进行了检查。我也无法进入 cellForRowAt indexPath 方法谁能帮我解决这个问题

这是我尝试过的代码

这是我的 UIView 类

class ButtonClicked: UIView {
@IBOutlet weak var tableView: UITableView!
override func didMoveToSuperview() {
//super.awakeFromNib()
}

这是我的 ViewController 类

class ViewController: UIViewController{
var tableviewDisplayArray: NSArray = []
override func viewDidLoad() {
super.viewDidLoad()
buttonClicked.tableView.register(UINib(nibName: “TableViewDisplayCell", bundle: nil), forCellReuseIdentifier: “tableViewDispCell")
buttonClicked.tableView.delegate = self
buttonClicked.tableView.dataSource = self
}
@IBAction func addMoneyButtonClicked() {
buttonClickedWebserviceCall()
actionAlertViewController.actionType = ActionAlertType.ADD_MONEY
present(self.view.actionAlertPopup(alertVC: actionAlertViewController), animated: animated, completion: nil)
}
func buttonClickedWebserviceCall(){
let params: NSDictionary = ["langId" : “1”, "countryId" : “1”]
callingWebservice().dataTaskWithPostRequest(urlrequest: URL_BUTTONCLICKED viewcontroller: self, params: params) { (result, status) in
let response : NSDictionary = result as! NSDictionary
let status = response.value(forKey: "httpCode") as! NSNumber
if status == 200{
DispatchQueue.main.async {
self.tableviewDisplayArray= (response.value(forKey: “response”) as? NSArray)!
print(self.tableviewDisplayArray)
self.buttonClicked.tableView.reloadData()
}
}
else{
DispatchQueue.main.async {
}
}
}
}//method close
}//class close

extension ViewController: UITableViewDelegate, UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if tableView == buttonClicked.tableView {
return tableviewDisplayArray.count
}
else{
return 5
}
}

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if tableView == buttonClicked.tableView {
return 30.0
}
else{
return 75.0
}
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if tableView == buttonClicked.tableView {
let cell = buttonClicked.tableView.dequeueReusableCell(withIdentifier: "tableViewDispCell", for: indexPath) as! TableViewDisplayCell
let storedArray = self.tableviewDisplayArray.object(at: indexPath.row) as! NSDictionary
print(storedArray)
return cell
}
else{
let cell = tableView.dequeueReusableCell(withIdentifier: “normalCell”, for: indexPath) as! NormalCell
return cell
}
}
}

最佳答案

您已在 UIViewController 类的扩展中编写了 tableView 委托(delegate)方法。只需在已设置委托(delegate)和数据源的 ViewController 类中编写该代码即可。就像这样

class ViewController: UIViewController,UITableViewDelegate, UITableViewDataSource{
var tableviewDisplayArray: NSArray = []
override func viewDidLoad() {
super.viewDidLoad()
buttonClicked.tableView.register(UINib(nibName: “TableViewDisplayCell", bundle: nil), forCellReuseIdentifier: “tableViewDispCell")
buttonClicked.tableView.delegate = self
buttonClicked.tableView.dataSource = self
}
@IBAction func addMoneyButtonClicked() {
buttonClickedWebserviceCall()
actionAlertViewController.actionType = ActionAlertType.ADD_MONEY
present(self.view.actionAlertPopup(alertVC: actionAlertViewController), animated: animated, completion: nil)
}
func buttonClickedWebserviceCall(){
let params: NSDictionary = ["langId" : “1”, "countryId" : “1”]
callingWebservice().dataTaskWithPostRequest(urlrequest: URL_BUTTONCLICKED viewcontroller: self, params: params) { (result, status) in
let response : NSDictionary = result as! NSDictionary
let status = response.value(forKey: "httpCode") as! NSNumber
if status == 200{
DispatchQueue.main.async {
self.tableviewDisplayArray= (response.value(forKey: “response”) as? NSArray)!
print(self.tableviewDisplayArray)
self.buttonClicked.tableView.reloadData()
}
}
else{
DispatchQueue.main.async {
}
}
}
}//method close
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if tableView == buttonClicked.tableView {
return tableviewDisplayArray.count
}
else{
return 5
}
}

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if tableView == buttonClicked.tableView {
return 30.0
}
else{
return 75.0
}
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if tableView == buttonClicked.tableView {
let cell = buttonClicked.tableView.dequeueReusableCell(withIdentifier: "tableViewDispCell", for: indexPath) as! TableViewDisplayCell
let storedArray = self.tableviewDisplayArray.object(at: indexPath.row) as! NSDictionary
print(storedArray)
return cell
}
else{
let cell = tableView.dequeueReusableCell(withIdentifier: “normalCell”, for: indexPath) as! NormalCell
return cell
}
}
//Notice that tableView delegate methods should be in your ViewController class because that is the 'self' here so delegate and datasource is the ViewController class
//buttonClicked.tableView.delegate = self
//buttonClicked.tableView.dataSource = self
//as you write this the tableview looks for data in this ViewController class.
//Extensions are meant for another purpose.
}
//class close

关于ios - 如何将数据(从服务器获取)传递到 UIView 中的 tableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45097383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com