2011-07-29 7 views
5

私は、(AppleのKeyboardAccessoryの例とまったく同じ方法で)必要なときにXIBからロードされる、UITextFieldセットアップ用のinputAccessoryViewを持っています。私の頭を丸くすることはできません - (void)playInputClick;

私はplayInputClick関数を使用してボタンをクリックするとその上にボタンを表示しようとしていますが、どのように動かすことはできません。 Apple documentationは、ビューにデリゲートメソッドを追加する必要があると言いますが、ビューは純粋にインターフェイスビルダーで作成されていますので、私はこれをどのように行うことができないのでしょうか。

誰でもこの作業を行う方法を知っていますか?このメソッドのサンプルコードはインターネットのどこでも使用されているようです。

+0

現在のサブクラスになるようにクラスを変更し、カスタムクラスのプロトコルを実装する必要があります – bshirley

答えて

-2

ビューコントローラクラスを実装する必要があります。インターフェイスビルダーでは、ファイルの所有者をこのクラスとして割り当てます。ビューコントローラのビューをビューに接続します。

これを済ませたら、ビューコントローラにデリゲートを実装できます。 それはかなり簡単でストレートです。基本的に、ビューはView Controllerクラスのメンバーになります。

+0

アップルのdocsから: 'UIViewのカスタムサブクラスでこのプロトコルを実装する'。それは間違っている、それは実際に代わりにUIViewControllerサブクラスで実装するつもりですか? –

+0

uiviewから派生したカスタムクラスを作成することもできます。基本的には同じです。 –

+1

これを試しました。私はプロトコルとデリゲートメソッドを実装するCustomKeyboardControllerクラスを作成しました。そして、inputAccessoryViewはcustomKeyboardController.viewに設定されています。ボタンが押されても音は出ません。私は、[[UIDevice currentDevice] playInputClick]メソッドが実行されているのを知っています。その隣にはNSLogステートメントがあり、デバッグ出力が表示されています。音が聞こえないだけです。 –

4

私は同じ問題を抱えており、最終的にそれを理解しました。

このプロトコルをUIViewControllerに実装すると、機能しません。 UIViewサブクラスで実装する必要があります。

それでは、私はインターフェイスビルダーでビューコントローラを使ってビューを作成しました。次に、UIViewのサブクラスである別のクラスを追加しました。このクラスは、UIInputViewAudioFeedbackプロトコルを実装しています。その後、インターフェースビルダーで私のビューのIDインスペクターに行き、UIInputViewAudioFeedbackプロトコルを実装している私のUIViewサブクラスにクラスを変更しました。キーボードのクリック音が働いています。

私のビューコントローラはまだ[[UIDevice currentDevice] playInputClick]を呼び出しています。私はUIInputViewAudioFeedbackプロトコルのコードをUIViewサブクラスに移動し、ビュークラスをUIViewサブラインに設定しました。

+0

ありがとうございました。基本的に、このメソッドは、標準ビューのボタンにクリックを追加するのには役に立たない。それはすべてサブクラス化されなければならない。 –

+0

@ YiminRongは、View Controllerのビューをサブクラス化するように変更したようです。 – dimpiax

+0

"collectionViewCellをplayInputClickに選択する"という私の経験を提供してください:UICollectionViewCellサブクラスでUIInputViewAudioFeedbackプロトコルを実装すると動作しません。 UICollectionViewサブクラスで実装する必要があります。 – denkeni

4

あなたはinputAccessoryViewでこれをやろうとしていると仮定すると:.hファイルで

、あなたが.mファイルでUIInputViewAudioFeedback

@interface YourAcessoryView : UIView <UIInputViewAudioFeedback> 

を実装することを示し、プロトコルを満たすために、このメソッドを追加

- (BOOL)enableInputClicksWhenVisible { 
    return YES; 
} 

ボタンを押したときは、次のようにします。

- (void)buttonPressed:(UIButton*)sender 
{ 
    [[UIDevice currentDevice] playInputClick]; 
    // do more stuff 
} 
関連する問題