Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 模拟等待时关闭键盘_Ios_Objective C_Nsthread_Resignfirstresponder - Fatal编程技术网

Ios 模拟等待时关闭键盘

Ios 模拟等待时关闭键盘,ios,objective-c,nsthread,resignfirstresponder,Ios,Objective C,Nsthread,Resignfirstresponder,此函数用于在用户成功登录时模拟等待。正如您所看到的,我首先关闭键盘,但这并不能阻止NSThread在关闭键盘之前休眠。我想我需要利用调度队列的能力,但不是很确定。我能在睡觉前关掉键盘吗 -(IBAction)userLoginButtonPressed:(id)sender { /* resign first responders so that the user can see the label of the server trying to log in */ [

此函数用于在用户成功登录时模拟等待。正如您所看到的,我首先关闭键盘,但这并不能阻止NSThread在关闭键盘之前休眠。我想我需要利用调度队列的能力,但不是很确定。我能在睡觉前关掉键盘吗

-(IBAction)userLoginButtonPressed:(id)sender
{
    /* resign first responders so that the user
     can see the label of the server trying to log in */
    [self.usernameField resignFirstResponder];
    [self.passwordField resignFirstResponder];
    self.statusLabel.text = @"Logging In...";

    // create the server object and pass in the username and password values
    IONServer *server = [[IONServer alloc] init];
    NSString *user = self.usernameField.text;
    NSString *pw = self.passwordField.text;
    [server loggingInWithUserName:user password:pw];

    // redirect based on result
    if (server.result.success) {
        [self serverSuccess];
        [NSThread sleepForTimeInterval:2.0f];
    } else {
        [self serverFailure];
    }

    // store the server object as this class' server var
    self.server = server;
    NSLog(@"Result From Server: %@", server.result);
}

取消键盘是动画的,这足以让我们知道它是在主线程上异步发生的。换句话说,代码块启动,将键盘添加到主线程runloop中,线程休眠2秒钟,因为你这么说(如果你要求我做的话,这是一件可怕的事情),然后轮到键盘设置动画并被解除

一个好把戏可以是

[UIView animateWithDuration:0 animations: ^{
    [self.usernameField resignFirstResponder];
    [self.passwordField resignFirstResponder];
} completion: ^(BOOL finished) {
    // Do whatever needed...
    [NSThread sleepForTimeInterval:2.0f];
}];
但是-我强烈建议找到比冻结主线程更好的解决方案


另外-没有您要求的内容,但是,假设您的所有文本字段都是
self.view
的子视图,您可以调用
[self.view endEditing:YES]并且您不需要关心哪个文本字段对应于响应者。

我会接受答案(添加提示),但您可能希望将块更新为[UIView animateWithDuration:0 animations:^{[self.view endEditing:YES];}完成:^(BOOL finished){[NSThread sleepForTimeInterval:2.0f];}];谢谢。我编辑了我的答案,我从脑海中写出了代码,并假设了一些打字错误。。。