UITableView.reloadData()不起作用

时间:2015-09-26 07:04:43

标签: swift uitableview

我有UITableView获取动态值。这些值取决于用户输入。用户输入一个字符串,代码通过使用该字符串从Internet获取一个数组。在我看来,UITableView和textField正在截图中完全相同的视图。当我按下获取塔(getTowerButton())按钮时,UITableView应使用reloadData()重新加载其数据。但它没有重新加载,因为它不会打印1和2.

注意:如果我将UITableView和用户条目分隔到两个不同的视图代码可以正常工作。和表加载。

class AddTowerViewController: UIViewController, UITextFieldDelegate, UITableViewDelegate, UITableViewDataSource {


    @IBOutlet weak var ICAOCodeField: UITextField!
    @IBOutlet weak var towersTable: UITableView!
    var towersArray: Array<String> = []
    override func viewDidLoad() {
        super.viewDidLoad()
        self.ICAOCodeField.delegate = self

                // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }




    @IBAction func getTowers() {
        towersArray = getTowerNames(ICAOCode: ICAOCodeField.text!)
        self.towersTable.reloadData()
    }


    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = towersTable.dequeueReusableCellWithIdentifier("Cellos", forIndexPath: indexPath) as UITableViewCell
        cell.textLabel?.text = towersArray[indexPath.row]
        return cell
    }

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

View

修改 我注意到当我分隔UITableView和用户输入视图时,表加载数据。我猜这个问题是因为系统只在第一次启动所属视图时运行numberOfRowsInSection和cellForRowAtIndexPath方法。

1 个答案:

答案 0 :(得分:2)

你说getTowerNames(ICAOCode:ICAOCodeField.text!)从互联网上加载数据,我认为你并没有同步这样做。我建议你创建一个完成块来处理请求的响应。像这样:

getTowerNames(ICAOCode: ICAOCodeField.text!, completion:(names: Array<String>) -> ())

然后使用完成闭包重新加载表。

getTowerNames(ICAOCode: ICAOCodeField.text!) {[weak self] names in 
    self?.towerNameArray = names
    self?.tableView.reloadData() 
}

希望有所帮助。