4

iPhoneアプリを起動すると、メイン画面にキーボードが表示されます。現在、インターフェイスの残りの部分が表示されるとすぐにキーボードが上昇し、これは視覚的に気が散ります。

キーボードをすでに上げた状態でビューを表示するにはどうすればよいですか?

起動時に画面の残りの部分を偽造して、ユーザーが最後に何をしていたかを確認できるようにしているので、キーボードも偽造できると思いました。しかし、実際のキーボードが表示されたときにモーションが存在する場合、その効果は失われています。私の知る限り、キーボードは別のビューではなく別のウィンドウにあるため、自分の画像でオーバーレイすることはできません。

キーボードを表示されたままの自分の画像でオーバーレイする方法、キーボードが完全に上がるまで表示しない方法、またはアニメーションを瞬時にする方法はありますか?

4

3 に答える 3

5

私の元の答えは、アニメーション化されたトランジションの場合(つまり、ビューコントローラーを押すか、アニメーション化されたモーダルコントローラーを提示する場合:YES)、キーボードをビューコントローラーと一緒にアニメーション化します。ただし、新しいView Controllerがアニメーション化されたトランジションなしで表示された場合でも、キーボードはアニメーション化されるため、問題は解決しません。

これが私のテストで機能した別のアプローチです。コントローラとキーボードを表示しているときにアニメーションを無効にしてみてください。

[UIWindow beginAnimations: nil context: NULL];
[UIWindow setAnimationsEnabled: NO];

RestoredController *controller = [[[RestoredController alloc] init] autorelease];
[self.navigationController pushViewController: controller animated: NO];

[UIWindow commitAnimations];

それでも、フィールドをviewWillAppear:またはviewDidAppear:の最初のレスポンダーにする必要があります。

于 2009-09-06T02:45:50.623 に答える
0

viewWillAppear:で、ビューが(self.viewを介して)ロードされていることを確認し、ファーストレスポンダーを正しいフィールドに設定します。これにより、でアニメーション化するのではなく、ビューが実際に表示されたときにキーボードが完全に表示されます。

例えば:

- (void) viewWillAppear: (BOOL) animated {
  [super viewWillAppear:animated];

  NSString *storedID = [[NSUserDefaults standardUserDefaults] stringForKey:@"storedID"];
  if ([storedID length] > 0) {
    idField.text = storedEmail;
    [passwordField becomeFirstResponder];
  } else {
    [idField becomeFirstResponder];
  }
}
于 2009-09-05T18:42:35.557 に答える
0

答えではありませんが、ここにいくつかのコードがあります。

UITextViewのフォントをviewDidLoadで設定しました。ビューはNIBによってインスタンス化され、アウトレットが正しく設定されます。

-(void)viewWillAppear:(BOOL)animated;
{
[super viewWillAppear:animated];

// Start with the text from the currently edited message
NSString *startString = self.messageManager.editingMessage.text;
// start string processing omitted
self.editingMessageEditingView.text = startString;

if([self showingMessageList]) {
    [self.editingMessageEditingView resignFirstResponder];
} else {
#if DEFAULT_SCREEN==1
    [[self.tools.items objectAtIndex:kPVToolBarItemDelete] setEnabled:NO];
    [[self.tools.items objectAtIndex:kPVToolBarItemSendLater] setEnabled:NO];
#else
    [self.editingMessageEditingView becomeFirstResponder];
#endif
}
于 2009-09-05T22:08:33.427 に答える