清除新細胞:
因爲我不理解一個100%你的問題,我認爲你的問題是,新的細胞得到cell_1,這是不是你想要的東西的價值。
如果是這種情況,那麼在UICollectionViewCell
中有一個稱爲prepareForReuse
的函數。 在你的UICollectionViewCell
的子類,具有如下功能:
override func prepareForReuse() {
super.prepareForReuse()
textfield.text = ""
}
這應該做的伎倆,因爲你的textfield
被稱爲textfield
。
執行任何必要的清理操作以準備再次使用該視圖。 https://developer.apple.com/reference/uikit/uicollectionreusableview/1620141-prepareforreuse
更新所有單元格:
如果你的問題是如何更新其他細胞獲得相同的內容cell_1,那麼這意味着集合視圖子類需要了解在更新cell_1,然後將該更新轉換爲其他單元格。 這樣做的一種方法是在集合視圖中設置您的textfield
的委託。當值更改(textField(_:shouldChangeCharactersIn:replacementString:)
)時,獲取所有可見單元格並相應地更新那些textfields
。也許還可以在cell_1中保存對textfield
的引用,或者在集合視圖中保存一個字符串變量,說明最新輸入的值,以便可以在顯示單元格時更新單元格。 你不要雖然想使用reloadData()
,因爲這將從textField
刪除焦點,因爲textField
重新加載。
解決方案:
class ViewController: UIViewController {
@IBOutlet weak var collectionView: UICollectionView!
fileprivate var customString: String?
}
extension ViewController: UICollectionViewDataSource {
func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 5
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CustomCell", for: indexPath) as! CustomCell
cell.textField.delegate = self
cell.textField.text = customString
return cell
}
}
extension ViewController: UITextFieldDelegate {
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
customString = string
for cell in collectionView.visibleCells {
if let cell = cell as? CustomCell,
let text = textField.text,
cell.textField != textField {
cell.textField.text = text+string
}
}
return true
}
}
在上面的代碼唯一con是,它遍歷當前可見細胞。通常我會建議不要循環,除非絕對必要,但上面解決方案的替代方法是發佈通知並讓單元監聽該通知並相應地更新其內容。這樣做不僅會矯枉過正,而且還有一些通知並非真正意義上的。第三種選擇是將數組中的弱引用保存到每個文本字段中,這可能不是最優的,因爲它會產生不必要的開銷。畢竟visibleCells
已經是當前可見的單元格陣列,每個單元格都擁有對UITextField
的引用。
我不是完全跟着你,只要是你的問題,所有的細胞得到** ** cell_1的價值,或者是你希望所有的細胞更新到** cell_1值**爲您在** cell_1 **中輸入「textfield」中的內容? –
@PaulPeelen我想我在cell_1 – javimuu