在iPad Form Sheet上响应时间非常慢

时间:2014-06-16 10:55:23

标签: ios forms uitextfield

我有以下问题:我有一个表格表,模态上有一个UITextField。点击UITextField时,大约需要3秒才能显示键盘,这非常慢。有谁知道问题可能是什么?

-(BOOL)textFieldShouldReturn:(UITextField *)textField{
  if (textField == self.licenseTextField) {
    [self.licenseTextField resignFirstResponder];
  } return YES;
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ [self.licenseTextField resignFirstResponder]; }

-(BOOL)disablesAutomaticKeyboardDismissal{ return NO; } 

2 个答案:

答案 0 :(得分:1)

除非必须显示键盘,否则iOS不会为键盘释放内存。有一些解决方法,不是很精致但功能齐全。

这是我使用的解决方案。在显示应用程序的实际内容之前,我在应用程序启动时预加载键盘。启动过程需要更长的时间,但是当我稍后显示键盘时,至少我的界面不会冻结。

//更新:Apple刚刚使用下面显示的方法拒绝了我的应用程序,因为它有时会启动到iPad模拟器(不是设备!)上的黑屏,上帝知道原因。

AppDelegate.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{   
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];

    UITextField *lagFreeField = [[UITextField alloc] init];
    [self.window addSubview:lagFreeField];
    [lagFreeField becomeFirstResponder];
    [lagFreeField resignFirstResponder];
    [lagFreeField removeFromSuperview];

    return YES;
}

- (void)keyboardDidShow:(NSNotification *) notification {
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidShowNotification object:nil];

    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 0.2 * NSEC_PER_SEC);
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
        if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
            self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil];
        } else {
            self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil];
        }

        self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:self.viewController];
        [self.window makeKeyAndVisible];
    });
}

调度修复了我的一些动画问题,也许你不需要它。 More information on the problem and possible solutions.

答案 1 :(得分:0)

在源代码中应用任何hack之前,请在没有调试模式且没有插入的情况下测试您的应用程序。很多iOS版本都有此问题。在真实环境中测试应用程序时,将无法加载。 感谢