我有一个简单的UITableViewController和基本单元格。 didSelectRowAtIndexPath做了简单的工作 - 只需制作UIAlertView并显示它。
问题是当我点击一行时有时会立即看到警报,有时几秒钟后(最多10秒)。
代码是
override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = self
tableView.delegate = self
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath) as! UITableViewCell
cell.selectionStyle = UITableViewCellSelectionStyle.None
// Configure the cell...
cell.textLabel?.text = "\(indexPath.row)"
return cell
}
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
NSLog("row clicked at index \(indexPath.row)")
let alert = UIAlertView(title: "Test", message: "Test message", delegate: self, cancelButtonTitle: "Done")
alert.show()
NSLog("alert showed")
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 4
}
在日志中我看到
2015-08-06 20:51:54.591 experimental[10323:8602172] row clicked at index 2
2015-08-06 20:51:54.595 experimental[10323:8602172] alert showed
2015-08-06 20:52:00.901 experimental[10323:8602172] row clicked at index 3
2015-08-06 20:52:00.905 experimental[10323:8602172] alert showed
但实际警示屏幕上没有显示。
任何建议或指向哪里可以找到解决方案将不胜感激。
答案 0 :(得分:22)
解决方案非常奇怪
替换
cell.selectionStyle = UITableViewCellSelectionStyle.None
与
cell.selectionStyle = UITableViewCellSelectionStyle.Default
完全解决问题。之后每次点击行都会立即显示结果。
答案 1 :(得分:3)
将它放在DispatchQueue.main.async函数中。
DispatchQueue.main.async{
let alert = UIAlertView(title: "Test", message: "Test message",
delegate: self, cancelButtonTitle: "Done")
alert.show()
NSLog("alert showed")
}
和replace cell.selectionStyle = UITableViewCellSelectionStyle.None
来
cell.selectionStyle = UITableViewCellSelectionStyle.Default
答案 2 :(得分:1)
如果您希望selectionStyle
为无,则应将alertView
方法添加到dispatch_async(dispatch_get_main_queue(),^{...});
或将selectionStyle
设置为默认值。
答案 3 :(得分:0)
我有同样的问题,绝对是一个错误。在我的情况下,它在加载视图之前增加了150ms。
我有一个带
的自定义表格单元格cell.selectionStyle = UITableViewCellSelectionStyle.None
将其更改为
cell.selectionStyle = UITableViewCellSelectionStyle.Default
解决了问题...
答案 4 :(得分:0)
在我的情况下,我需要选择样式.none
,因为我使用自定义单元格。因此,我必须使用didHighlightRowAt
和didUnhighlightRowAt
。当您使用.default
时,您无法处理这些事件。
对我来说DispatchQueue.main.async{}
做了伎俩!
答案 5 :(得分:0)
尝试设置:
delaysContentTouches = false