0

inputAccessoryViewを、オプションのキーボード用のボタンがあるXIBのファイルビューの参照アウトレットとして設定しました。これにより、標準キーボードが表示されている場合はビューが表示され、標準キーボードが非表示の場合は非表示になります。

また、ミドルゾーンでタップした場合は、オプションのキーボードを非表示にする必要があります。これにより、標準キーボードが表示されている間は非表示になります。これを行うために、同じXIBのファイルビューの参照アウトレットとして別のプロパティも設定します。

フレームのorigin.yを高い数値に設定するオプションのキーボードを非表示にしています。

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.30f];
viewOptionalKeyboard.frame = CGRectMake(viewOptionalKeyboard.frame.origin.x, 1200, viewOptionalKeyboard.frame.size.width, viewOptionalKeyboard.frame.size.height);
[UIView commitAnimations];
[UIView setAnimationDuration:0];

これにより、オプションのキーボードは非表示になりますが、アニメーションは標準のキーボードの上に表示され、後ろには表示されません。補助キーボードがウィンドウ全体に上から下に移動し、非表示になるのを確認できます。

標準キーボードの「後ろ」に隠して、隠しプロセスの見栄えを良くする方法はありますか?

ビューのサイズを変更することを提案したChrisの回答で非表示がうまく機能しているため、この質問を編集しました。

ここで問題となるのは、もう一度表示することです。ボタンをタップすると、ビューが同じサイズで再び表示されるはずです。ボタンタップイベントで、次のコードを追加しました。

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.30f];
viewOptionalKeyboard.frame = CGRectMake(viewOptionalKeyboard.frame.origin.x, 500, viewOptionalKeyboard.frame.size.width, 74);
[UIView commitAnimations];
[UIView setAnimationDuration:0];

これは、オプションのキーボードを元のサイズと元のy位置に設定するためのものです。元の位置になりますが、間違っている点が2つあります。

1)標準キーボードの上/上に表示されるので、非表示の問題に戻りますが、表示するときはここに戻ります。ここでも、オプションのキーボードがウィンドウ全体に下から元の位置に来るまで表示されます。

2)オプションのキーボードを含むメインビューに属するボタンは、押しつぶされたかのように短いサイズになっています。

この問題を回避するためにキーボードを再度提示するための最良の方法はどれですか?

4

1 に答える 1

1

yポイントを移動すると同時にビューの高さを下げてみませんか?

//For ease of reading    
CGRect frame = viewOptionalKeyboard.frame;

float x = frame.origin.x;
float y = frame.origin.y + frame.size.height;

viewOptionalKeyboard.frame = CGRectMake(x, y, frame.size.width, 0);

サブビューに柔軟な高さの自動サイズ変更マスクがあることを確認する必要があります。

編集:ビューを非表示/表示する必要があるように質問が変更されたため、回答も変更されました

元のフレームの高さを追跡するには、ivarまたはプロパティが必要です。

@property (nonatomic, assign) float originalHeight;

次に、表示/非表示のメソッドで、viewOptionalKeyboardフレームが表示されているかどうかを確認し、それに応じて動作します。

CGRect frame = viewOptionalKeyboard.frame;

BOOL isVisible = frame.size.height!=0;

//Only need to set once
if (!originalHeight && isVisible){
    self.originalHeight = frame.size.height;
}

frame.origin.y += (isVisible) ? originalHeight : -originalHeight;
frame.size.height = (isVisible) ? 0 : originalHeight;

viewOptionalKeyboardFrame.frame = frame;
于 2012-10-18T17:19:24.850 に答える