ios - 選択状態 - uitableviewdatasource




UITableViewCell選択時の応答が非常に遅い (4)

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.Nonecell.selectionStyle = UITableViewCellSelectionStyle.Default replace cell.selectionStyle = UITableViewCellSelectionStyle.None cell.selectionStyle = UITableViewCellSelectionStyle.Default

基本セルを使った簡単な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

しかし実際にはアラートは画面に表示されません。

何か提案や解決策を見つけるための場所を指し示すことは評価されます。


selectionStyleをNoneにしたい場合は、 alertViewメソッドをdispatch_async(dispatch_get_main_queue(),^{...});追加しdispatch_async(dispatch_get_main_queue(),^{...}); またはselectionStyleをDefaultに設定します。


私の場合は、カスタマイズされたセルを使用するので、選択スタイル.noneが必要です。 したがって、私はdidHighlightRowAtdidUnhighlightRowAtdidHighlightRowAtするdidHighlightRowAtありdidUnhighlightRowAt.defaultを使用しているときは、これらのイベントを処理できません。

私にとってはDispatchQueue.main.async{}がうまくいきました!


私はこれとまったく同じ問題、間違いなくバグを抱えていました。 私の場合は、ビューをロードする前に150msを追加していました。

カスタムテーブルセルを

cell.selectionStyle = UITableViewCellSelectionStyle.None

に変更

cell.selectionStyle = UITableViewCellSelectionStyle.Default

問題を修正しました...





uikit