我有一个获取动态值的 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/