我有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
}
...
修改
我注意到当我分隔UITableView
和用户输入视图时,表加载数据。我猜这个问题是因为系统只在第一次启动所属视图时运行numberOfRowsInSection和cellForRowAtIndexPath方法。
答案 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()
}
希望有所帮助。