1
在我的Apple TV項目中,我需要任意顯示輸入屏幕,而不需要輸入UITextField
。例如,當用戶點擊UICell
時。但是,我只找到使用UITextField
或顯示UIAlertController
的解決方案。如何顯示沒有UITextField的輸入屏幕?
於是,我寫了一個代碼波紋管(有解決方法),以顯示輸入畫面:
class ShowInput: UITextField, UITextFieldDelegate {
var callback: ((String) -> Void)?
init() {
super.init(frame: CGRect(x: 0, y: 0, width: 0, height: 0))
self.delegate = self
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func textFieldDidEndEditing(_ textField: UITextField) {
callback?(textField.text!)
textField.text = ""
textField.removeFromSuperview()
}
}
然後,鑑於...
class CreateGridViewController: UICollectionViewController {
let showInput = ShowInput()
// ...
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let cell = collectionView.cellForItem(at: indexPath) as! CellConfigInput
cell.addSubview(showInput)
showInput.callback = { text in
cell.labelField.text = text
}
showInput.becomeFirstResponder()
}
但是,我希望有一個更好的解決方案,一個可讀的代碼。這是可能的?
對不起,但我試過了,我不能工作。我對'CellConfigInput'進行了'UIKeyInput'協議的訂閱,並且重寫'canBecomeFocused'以始終返回true,但是當我調用'becomeFirstResponder()'時,什麼都不會發生。我也嘗試過使用'CreateGridViewController',但不能工作。 – Macabeus
您需要重寫'canBecomeFirstResponder'而不是'canBecomeFocused'來使這個工作。 –
是的,我也做了,但沒有顯示鍵盤:https://gist.github.com/brunomacabeusbr/6a196a6293bb429119d49ca2a3757080 行'cell.becomeFirstResponder()'和'override var canBecomeFocused:Bool {return true}'是稱爲,但即使如此,鍵盤也不會被調用。 – Macabeus