swift - UITableView.reloadData() 无法获取正确的文本

标签 swift uitableview

我有一个获取动态值的 UITableView。这些值取决于用户输入。用户输入一个字符串,代码使用该字符串从 Internet 获取一个数组。在我看来,UITableView 和 textField 正在运行。当我按下 Get Tower(getTowerButton()) 按钮时,UITableView 应使用 reloadData() 重新加载其数据。但它没有重新加载,因为它不打印 1 和 2。

注意:如果我将 UITableView 和用户输入分开到两个不同的 View 代码中。和表负载。

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
    }
...
       

编辑: 我注意到,当我将 UITableView 和用户输入 View 分开时,表格会加载数据。我猜这个问题是因为系统只在所属 View 的第一次启动时运行 numberOfRowsInSection 和 cellForRowAtIndexPath 方法。

最佳答案

您是说 getTowerNames(ICAOCode: ICAOCodeField.text!) 从 Internet 加载数据,但我认为您没有同步执行此操作。我建议您创建一个完成 block 来处理请求的响应。像这样:

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

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

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

希望对您有所帮助。

关于swift - UITableView.reloadData() 无法获取正确的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32794571/

相关文章:

ios - AVPlayer swift : How do I hide controls and disable landscape view?

ios - SKScene 中的 AdMob 奖励视频

ios - 计算 Realm 对象列表中的项目数不起作用

iso8601 中的 swift 4 工作日

c - 为什么这个tuple -> String 转换会触发偶发的内存重叠异常

ios - 将枚举案例与参数进行比较

swift - 如果表为空则显示 map

ios - 将现有数组绑定(bind)到 tableView IOS

ios - 我无法从自定义 UITableViewCell 中删除自定义 UIButton

ios - TableView 单元格再次显示