辞职第一响应者不';t关闭键盘(iPhone)

辞职第一响应者不';t关闭键盘(iPhone),iphone,keyboard,uitextfield,uialertview,dismiss,Iphone,Keyboard,Uitextfield,Uialertview,Dismiss,我已经在这个网站上搜索过了,我找不到解决我现在面临的问题的方法。希望有人能帮忙 我创建了一个UIAlertView来提示用户在iPhone应用程序中输入他们的姓名 UIAlertView *enterNameAlert = [[UIAlertView alloc] initWithTitle:@"Enter your name" message:@"\n\n\n"

我已经在这个网站上搜索过了,我找不到解决我现在面临的问题的方法。希望有人能帮忙

我创建了一个UIAlertView来提示用户在iPhone应用程序中输入他们的姓名

    UIAlertView *enterNameAlert = [[UIAlertView alloc] initWithTitle:@"Enter your name"
                                                             message:@"\n\n\n"
                                                            delegate:self
                                                   cancelButtonTitle:NSLocalizedString(@"Cancel", nil)
                                                   otherButtonTitles:NSLocalizedString(@"OK", nil),nil];

    UITextField *enterNameField = [[UITextField alloc] initWithFrame:CGRectMake(16, 83, 252, 25)];
    enterNameField.keyboardAppearance = UIKeyboardAppearanceAlert;
    enterNameField.borderStyle = UITextBorderStyleRoundedRect;
    enterNameField.autocorrectionType = UITextAutocorrectionTypeNo;
    enterNameField.clearButtonMode = UITextFieldViewModeWhileEditing;
    enterNameField.returnKeyType = UIReturnKeyDone;
    enterNameField.delegate = self;
    [enterNameField becomeFirstResponder];
    [enterNameAlert addSubview:enterNameField];

    [enterNameAlert show];
    [enterNameAlert release];
    [enterNameField release];
我已将此viewController设置为符合头文件中的UITextFieldDelegate,并实现了
textFieldShouldReturn:
在用户点击“完成”时尝试关闭键盘

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    if ([textField isFirstResponder]) {
        [textField resignFirstResponder];
        NSLog(@"text field was first responder");
    } else {
        [textField becomeFirstResponder];
        [textField resignFirstResponder];
        NSLog(@"text field was not first responder");
    }
    NSLog(@"textfieldshouldreturn");
    return YES;
}

在调试器中,当我点击Done按钮时,我确认此方法被成功调用,此时textField是第一个响应程序。然而,键盘没有消失,但小clearButton消失了。很明显,textField不再是第一个响应者,因为当我再次单击“完成”按钮时,不会调用任何内容。我只想用“完成”按钮关闭键盘。谁能提供一个解决方案?万分感谢。

调用resignFirstResponder方法后,如果将文本字段的释放移动到委托方法,会发生什么?

尝试在文本字段的“Didenonexit”事件中使用resignFirstResponder解除键盘

然后,当您将数据输入文本字段后,按键盘上的“完成”按钮,尝试关闭键盘


希望这会有所帮助。

让另一个对象成为,然后立即退出第一响应者。

首先,您需要在界面标题中定义您的
enterNameAlert
。然后使用下面的代码

- (void)viewDidLoad {    
    [super viewDidLoad];
    enterNameAlert = [[UIAlertView alloc] initWithTitle:@"Enter your name"
                                                             message:@"\n\n\n"
                                                            delegate:self
                                                   cancelButtonTitle:NSLocalizedString(@"Cancel", nil)
                                                   otherButtonTitles:NSLocalizedString(@"OK", nil),nil];

    UITextField *enterNameField = [[UITextField alloc] initWithFrame:CGRectMake(16, 83, 252, 25)];
    enterNameField.keyboardAppearance = UIKeyboardAppearanceAlert;
    enterNameField.borderStyle = UITextBorderStyleRoundedRect;
    enterNameField.autocorrectionType = UITextAutocorrectionTypeNo;
    enterNameField.clearButtonMode = UITextFieldViewModeWhileEditing;
    enterNameField.returnKeyType = UIReturnKeyDone;
    enterNameField.delegate = self;    
    [enterNameAlert addSubview:enterNameField];
    [enterNameField becomeFirstResponder];
    [enterNameAlert show];    
    [enterNameField release];
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    if ([textField isFirstResponder]) {
        [textField resignFirstResponder];
        [enterNameAlert dismissWithClickedButtonIndex:1 animated:YES];
        [enterNameAlert release];
        NSLog(@"text field was first responder");
    } else {
        [textField becomeFirstResponder];
        [textField resignFirstResponder];
        NSLog(@"text field was not first responder");
    }
    NSLog(@"textfieldshouldreturn");
    return YES;
}
干脆

[mytextField addTarget:self 
            action:@selector(methodToFire:)
            forControlEvents:UIControlEventEditingDidEndOnExit];

如果有人在故事板中遇到此问题,我必须进入我的uitextfields属性并按住ctrl键并将其从代理拖动到其根视图控制器,所有这些都在故事板中解决了。

如果将文本字段设置为视图控制器中的属性,会发生什么情况,从而确保即使在警报解除后仍保留该警报?我想知道它是否在事件循环开始发送辞职FirstResponder消息或类似的奇怪消息之前就被释放了。另外,我们曾经一起工作过吗?在-(iAction)Didenonexit:(id)sender{//您的代码在这里运行}上实现resignFirstResponder上述解决方案有帮助吗?抱歉,我不太确定如何实现此目标。这很有效!!但是我必须从-(BOOL)textField shouldReturn:(UITextField*)textField方法中删除[enterNameAlert release]。否则,应用程序将在我单击“完成”按钮后崩溃并退出。但我对记忆的东西不太熟悉。这样做是否会导致内存泄漏?如果不想释放TextField中的enterNameAlert,则应返回。没关系。但是您必须在实现中的其他地方发布它。比如:-dealloc{[enterNameAlert release];[super dealloc];}