2017-03-09 9 views
1

私のApple TVプロジェクトでは、入力画面をUITextFieldなしで任意に表示する必要があります。たとえば、ユーザーがUICellをクリックしたとします。しかし、私はUITextFieldまたはUIAlertControllerを使って解決策を見つけました。私は、よりよい解決策をしたい、...ビューで、その後UITextFieldなしで入力画面を表示するには?

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() 
    } 

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() 
    } 
} 

しかし:

その後、私は、入力画面を表示する(回避策で)コード怒鳴るを書きました読み取り可能なコードそれが可能だ?

答えて

0

あなたが好きな標準UIResponderサブクラスをUIKeyInputプロトコルに準拠させて、becomeFirstResponder()を呼び出してキーボードを呼び出すことができます。

UICollectionViewControllerUIResponderサブクラスなので、CreateGridViewControllerをキー入力プロトコルに準拠させ、テキストフィールド全体を避けることができます。

+0

申し訳ありませんが、私は試しましたが、私はそれを動作させることはできません。 'CellConfigInput'に' UIKeyInput'プロトコルをサブスクライブし、 'canBecomeFocused'を常にtrueに戻すようにオーバーライドしましたが、' becomeFirstResponder() 'を呼び出すと何も起こりません。私は 'CreateGridViewController'でも試してみましたが、うまくいきません。 – Macabeus

+0

この作業を行うには、 'canBecomeFocused'の代わりに' canBecomeFirstResponder'をオーバーライドする必要があります。 –

+0

私もそれを作ったが、キーボードは表示しなかった:https://gist.github.com/brunomacabeusbr/6a196a6293bb429119d49ca2a3757080 'cell.becomeFirstResponder()'と 'override var canBecomeFocused:Bool {return true}'はと呼ばれますが、それでもキーボードは呼び出されません。 – Macabeus

関連する問題