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

时间:2017-07-14 07:40:58

标签: ios iphone swift uitableview uiview

我有一个viewController。在那我有一个按钮,如果我点击该按钮我在该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
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您已经在UIViewController类的扩展中编写了tableView委托方法。只需在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