これを動作させる唯一の方法は、2番目のテキストフィールドを使用することです。アイデアは、それをサブビューにすることですが、見えません(狂った矩形のため)。 firstResponderをデリゲートメソッドを取得しながら、実際のテキストフィールドとの間で切り替えます。私は(あなたがペーストをコピーして、時間の約2分で動作を確認することができます)いくつかのいずれかのViewControllerのテストプロジェクトを作成し、これをした:
@implementation ViewController
{
UITextField *field;
UITextField *dummyView;
}
- (void)viewDidLoad
{
[super viewDidLoad];
field = [[UITextField alloc] initWithFrame:CGRectMake(0, 460, 320, 20)];
field.borderStyle = UITextBorderStyleRoundedRect;
field.delegate = self;
//field.inputAccessoryView = field;
field.text = @"FOO";
[self.view addSubview:field];
dummyView = [[UITextField alloc] initWithFrame:CGRectMake(0, 40000, 320, 20)];
dummyView.delegate = self;
[self.view addSubview:dummyView];
}
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
if(textField == field && textField.superview == self.view) {
[field removeFromSuperview];
dummyView.inputAccessoryView = field;
[dummyView becomeFirstResponder];
}
return YES;
}
@end
私はiOSの4以降出荷のアプリでこの技術を使用しました追加する必要があります。
EDIT:他のアイデアのカップルので:
1)、キーボードが少し良く見て移動を開始するとき、あなたはあなたのTextViewのスナップショットを取ることができるグリッチを作るUIImageViewにそれを置く、とするにはテキストビューをプライマリビューから削除し、UIImageViewで置き換えます。今、外観は同じです。画像にアニメーションを追加して、50msの間にノーテイングが起こると、アルファは0になります。実際のテキストビューに同様のアニメーションを追加して、0のアルファ値が50msになるようにします。これを微調整することができれば、移行は良好です(ただし、それほど優れているわけではありません)。
2)Appleがおそらくそうする方法は、キーボードの移動通知からアニメーションカーブとタイミングを取得することです。この場合、最初は高さ0のアクセサリビューを追加し、キーボードを追跡するようにtextFieldをアニメートしますが、その上に表示されます。両方とも同時に同じ距離を移動します。アニメーションの最後では、textFieldがself.viewから引き出され、アクセサリビューのフレームはtextFieldの高さに変更され、textFieldはアクセサリコンテナビューのサブビューとして配置されます。これはうまくいくはずですが、それはちょっと複雑です。あなたが誰かにコード化してもらうためには、あなたは100ポイントの賞金を提供します。最初のレスポンダを辞めてしまうので、テキストフィールドを最後に移動して移動するときには、ダミーのテキストフィールドが必要です。だから最後に、ダミーフィールドを最初のレスポンダにし、テキストフィールドを移動してから、実際のテキストフィールドを最初のレスポンダに再び設定します。
デビッドありがとうございます。私はこれを試し、私ができる時に更新します。 Appleがこれを行うためのより良い方法を提供していないことは残念です。 – Ricky
私の個人的な意見は、それほどコードではなく、OSXで頻繁に使用されていたプリンシパルを使用しており、率直に言えば、他のバグや機能がありました。私は徐々に更新することはできません(クラッシュする)複雑なコレクションビューを持っているので、すべての変更を行うにはすべてをリロードする必要があります! –
私はこれをUITextViewsで動作させることができましたが、UIKeyboardは画面の下部からinputAccessoryViewでアニメーション化されています。非常に短時間の間に、一方のビューが他方のビューを上に向くのを見ることができます。あなたはこれに気づいたことがありますか? – Ricky