2017-04-26 27 views
-1

此處出現意外的行爲。 我有一個聊天組成的tableview和底部酒吧與textView。 當用戶選擇textView時,鍵盤出現。修改tableview框架後最後選定的單元格狀態爲true

我使用通知UIKeyboardWillShowNotification來修改tableview的框架。

選擇一行將顯示一個UIAlertController,並使用不同的操作刪除鍵盤。

這個UIAlertController有一個取消操作,即刪除單元格的選擇(通過選擇我的意思是當單元格的選定狀態爲真時出現的灰色樣式)。 通過將cell.selected設置爲false來刪除選擇內容。

問題是,當鍵盤出現時,這個先前選擇的單元格再次被選中,我試圖循環通過單元格將它們全部置於選定的假,但取決於單元格的位置,選定的狀態只會出現在滾動,使我的循環無效。

因爲我不在我的代碼中手動選擇單元格,我認爲這是一種可能來自於框架更改的行爲? 有什麼我可以做的,以解決這個問題?

+0

分享一些代碼。 – KKRocks

+0

不能,你需要至少一半的控制器代碼,意思是250行,模型和故事板重現,我在nda下。 只是試圖看看有人遇到過這個問題,否則我只是填充雷達,並移動 –

+0

[如何 - 示例代碼](https://stackoverflow.com/help/mcve)。 – shallowThought

回答

1

供以後

var indexPath: IndexPath? 

提到它創建indexPath變量中的tableView委託didSelect行分配選定indexPath到已創建

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    self.indexPath = indexPath 
} 

函數裏面的一個,你在聽對於鍵盤通知,請使用您引用的索引取消選擇所選行

func keyboardDidShow(notification: Notification) { 
    // your existing code... 
    if let indexPath = indexPath { 
     // deselect the selected row. I set animation to false 
     tableView.deselectRow(at: indexPath, animated: false) 

     // just a clean up set the indexPath to nil once done 
     self.indexPath = nil 
    } 
} 

這是解決問題的一種方法。

每個單元格都有一個selectedView,您可以將該視圖的backgroundColor設置爲clearColor,然後該行將被選中,但您不會看到。或者你可以爲selectedBackgroundView返回你自己的視圖。

+0

似乎將選中的狀態設置爲false並不夠,實際上使用deselectRowAtIndexPath解決了我的問題。 奇怪,但這是要走的路,感謝提示 (只需要設置這個我用於選擇狀態的地方) 儘管如此,仍然看起來像一個錯誤,如果有一個選定的狀態是什麼使用它會導致意想不到的行爲。 –

0

添加一些代碼將有很大幫助。 有限的信息,這是我的感覺:

它可能是由於重用出隊單元(因爲您在鍵盤通知觸發時更改表)。

這是我的一般做法:

let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: CELL_REUSE_IDENTIFIER) 
prepareDequeuedCellForReuse(cell) 

的prepareDequeuedCellForReuse有這樣的事情:

private func prepareDequeuedCellForReuse(_ dequedCell: UITableViewCell){ 
    dequedCell.textLabel?.text = "" 
    dequedCell.tag = -1; 
    dequedCell.isSelected = false 
} 

,我建議你在這裏清除選擇。

+0

是由於我使用cell.selected = false而不是使用deselectRowAtIndexPath。 我不明白爲什麼setter不是私人的使用它會導致意想不到的行爲,但至少我的問題已解決,謝謝你的時間。 –

相關問題