我的控制器类中有UITableView
IBOutlet
。它默认是隐藏的,但在文本字段编辑时,它会调用Google地方加载城市,与文本字段中输入的文本相匹配。
当文字发生变化时,我会从google places api获取结果,取消隐藏表格,然后调用表格重新加载数据方法。
self.cityAutocompleteList.hidden = false
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
{
self.cityAutocompleteList.reloadData()
})
numberOfRowsInSection
正确显示行。但是cellForRowAtIndexPath
没有被解雇。
在iOS模拟器iPhone5s上一切正常,但它在运行iOS 7.1的iPhone上无效。
编辑:
我也尝试在主队列中更新,如下所示,但仍无效。
dispatch_async(dispatch_get_main_queue(),
{
self.cityAutocompleteList.reloadData()
})
更新1: 事实上,即使表格没有隐藏起来,也没有显示。
更新2: 经过一些搜索后,我发现不建议在滚动视图中添加一个tableview,因此即使没有隐藏,tableView也不会显示。但我的问题是这个,我需要在文本字段上有类似行为的下拉菜单。所有文本字段都在滚动视图中,因为我在编辑时向上移动文本字段,以免被键盘隐藏。那我怎么能避免这个问题呢?
答案 0 :(得分:3)
如果你想在主线程上发生某些事情,你需要这样做:
dispatch_sync(dispatch_get_main_queue(), ^{
//Your code goes in here
NSLog(@"Main Thread Code");
});
在swift中使用以下内容:
dispatch_sync(dispatch_get_main_queue(), {
println("Main Thread Code")
})
您的代码似乎正在将重新加载到后台线程,以确保表视图不会更新
在这种情况下,tableview位于scrollview内部,这是不正确的。