4

当我的 iPhone 应用程序启动时,主屏幕有一个键盘。目前,一旦显示界面的其余部分,键盘就会升起,这在视觉上会分散注意力。

如何在键盘已经启动的情况下显示视图?

由于我已经在启动期间伪造了屏幕的其余部分,以便用户看到他们最后在做什么,我认为我也可以伪造键盘。但是,如果真正的键盘出现时有动作,我就失去了效果。据我所知,键盘在一个单独的窗口上,而不仅仅是一个单独的视图,所以我不能用我自己的图像覆盖它。

有没有办法在键盘出现时用我自己的图像覆盖键盘,或者在键盘完全向上之前不显示键盘,或者让它的动画即时?

4

3 回答 3

5

如果它是动画转换(即推动视图控制器或呈现带有动画的模态控制器:YES),我最初的答案是键盘与视图控制器一起动画。但是,如果新视图控制器显示时没有动画过渡,键盘仍然会动画,因此它不能解决您的问题。

这是在我的测试中有效的另一种方法。尝试在显示控制器 + 键盘时禁用动画。

[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

不是答案,但这里有一些代码。

我在 viewDidLoad 中为我的 UITextView 设置了字体。视图由 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 回答