2011-07-21 22 views
2

テキストを編集するときに使用するツールバーがあります。以前のアプリでiPhone:InputAccessoryViewをViewに修正するにはどうすればいいですか?

、私は

(など、通知のリスニング)を手動でツールバーを移動した。しかし、私は

for (/*myTextFields*/) { 
    textField.inputAccessoryView = keyboardToolbar; 
} 
[self.view addSubView:keyboardToolbar]; 

を行うので、私のviewDidLoadで... inputAccessoryViewを使用したいですどちらがうまくいけば、ツールバーが表示され、テキストフィールドをクリックすると、ツールバーがスライドアップします。 しかし、キーボードを隠すと、inputAccessoryViewはツールバーを画面からドラッグします。 inputAcessoryViewの固定場所はどこですか? - あるいは私は通知などを聞く私の古い方法に戻る必要がありますか?

+0

私はこの正確なことを行う方法を見つけようとしています(私の場合、私はiOSメッセージUXを複製しようとしています)。あなたがアニメーションを処理するので、アクセサリービュー_seems_を良いアイデアのように使用する。私は再び通知に戻ると思います... –

答えて

2

私は通知を聞いて、ツールバーを上に動かすことでこれを解決しました...まあまあ。このような

何かが仕事をしていません:

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    /* Listen for keyboard */ 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; 
} 
- (void)keyboardWillShow:(NSNotification *)notification 
{ 
    [keyboardToolbar setItems:itemSetFull animated:YES]; 
    /* Move the toolbar to above the keyboard */ 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.3]; 
    CGRect frame = self.keyboardToolbar.frame; 
    frame.origin.y = self.view.frame.size.height - 210.0; 
    self.keyboardToolbar.frame = frame; 
    [UIView commitAnimations]; 
} 

- (void)keyboardWillHide:(NSNotification *)notification 
{ 
    [keyboardToolbar setItems:itemSetSmall animated:YES]; 
    /* Move the toolbar back to bottom of the screen */ 
    [UIView beginAnimations:nil context:NULL]; 
    [UIView setAnimationDuration:0.3]; 
    CGRect frame = self.keyboardToolbar.frame; 
    frame.origin.y = self.view.frame.size.height - frame.size.height; 
    self.keyboardToolbar.frame = frame; 
    [UIView commitAnimations]; 
} 

私は最近、それを考え出した入力アクセサリビューは、文字通り、キーボードの上部に貼り付け何か:)

+2

右。元のアプローチが元のように動作した理由は、ビューが複数のスーパービューを持つことができないためです。キーボードがテキストフィールドの1つになるとすぐに、入力アクセサリビューがキーボードビューに追加されました。キーボードビューには、それが元のスーパービューから自動的に削除されます。以前の場所を把握していないので、ここでの解決策が必要な動作には必要です。私はSMSアプリもこれを行うと思います。キーボードが表示されているときにキーボードの上に表示され、キーボードが閉じられたときには下に固定された固定バーがあります。 – Kevlar

+0

ご清聴ありがとうございます。 –

1

のためのものだと思いますし、少数の人がいるようです。だから、私はこの答えにご案内したいと思います:あなたのビューコントローラにプロパティにごUIToolbarを割り当て

::私はちょうど下にコピーしますhttps://stackoverflow.com/a/24855095/299711、あなたのトップビューコントローラで

@property (strong, nonatomic) UIToolbar *inputAccessoryToolbar; 

を追加これらの方法:キーボードが隠れますたび

- (BOOL)canBecomeFirstResponder{ 

    return YES; 

} 

- (UIView *)inputAccessoryView{ 

    return self.inputAccessoryToolbar; 

} 

そして(必要に応じて、それは通常は必要ありませんように)、単に呼び出す:

[self becomeFirstResponder]; 

このようにして、あなたのinputAccessoryToolbarはあなたのビューコントローラとテキストビューの入力アクセサリビューの両方になります。

+3

これは保持サイクルを生成し、UIViewControllerは決して解放されません。メモリリーク –

+0

しないでください。おそらくあなたはいくつかのコードを共有することができますか? – arik

+0

答えに貼り付けた正確なコードを使用しました。唯一の違いは、私のアクセサリービューがストーリーボードでインスタンス化されていることです。私はIBOutletに弱い参照を保持しています。 –

関連する問題