iPhone键盘,Done按钮和resignFirstResponder

11 浏览
0 Comments

iPhone键盘,Done按钮和resignFirstResponder

这可能是一个愚蠢的问题,但是我在文档中找不到答案。在弹出键盘上,“完成”按钮是否总是导致键盘消失?我在网络上看到了很多类似的代码:

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
    [theTextField resignFirstResponder];
    return YES;
}

当我按下“完成”按钮时,键盘弹出并且UITextField放弃了第一响应者。

我猜测以前按下“完成”按钮不会导致UITextField放弃第一响应者,但这种行为在某个时候发生了改变。

我在OS 3.0 - 3.1.3上进行调试。

0
0 Comments

问题的原因是在处理textFieldShouldReturn:消息期间,文本字段以某种方式失去了焦点,导致键盘消失。解决方法是在代码中添加resignFirstResponder方法,或者通过将焦点移动到另一个组件来解决。

解决方法示例代码如下:

textField.resignFirstResponder()

如果你发现在处理textFieldShouldReturn:消息时键盘消失,但又没有找到原因,可以考虑以下几点:

- 是否在代码中调用了resignFirstResponder方法?

- 是否在其他地方将焦点移动到了其他组件上,比如改变表格或标签中的某个值?

- 是否在文本字段的代理方法中处理了其他与键盘相关的事件?

通过添加resignFirstResponder方法或检查焦点移动的代码,你可以解决文本字段失去焦点导致键盘消失的问题。

0
0 Comments

在Xcode 5.1中,出现了“iPhone键盘、完成按钮和resignFirstResponder”的问题。问题的原因是在Storyboard中没有启用“完成”按钮和隐藏键盘的功能。解决这个问题的方法如下:

1. 启用“完成”按钮:

- 在Storyboard中选择UITextField,在属性检查器中找到“Return Key”字段,并选择“Done”。

2. 当按下“完成”按钮时隐藏键盘:

- 在Storyboard中将您的ViewController设置为UITextField的代理。

- 在ViewController中添加以下方法:

Objective-C代码:

   -(BOOL)textFieldShouldReturn:(UITextField *)textField
   {
       [textField resignFirstResponder];
       return YES;
   }
   

Swift代码:

func textFieldShouldReturn(_ textField: UITextField) -> Bool {

textField.resignFirstResponder()

return true

}

这样,当用户在UITextField中按下“完成”按钮时,键盘将被隐藏。

0
0 Comments

iPhone键盘,Done按钮和resignFirstResponder问题的出现的原因是因为在代码中没有使用resignFirstResponder方法来取消响应者的第一响应状态。解决方法是在textFieldFinished方法中加入[sender resignFirstResponder]代码。

具体代码如下:

#import

TextFieldTestViewController : UIViewController

{

UITextField *textField;

}

@property (nonatomic, retain) IBOutlet UITextField *textField;

@end

#import "TextFieldTestViewController.h"

@implementation TextFieldTestViewController

@synthesize textField;

- (void)viewDidLoad

{

[super viewDidLoad];

[self.textField setDelegate:self];

[self.textField setReturnKeyType:UIReturnKeyDone];

[self.textField addTarget:self

action:@selector(textFieldFinished:)

forControlEvents:UIControlEventEditingDidEndOnExit];

}

- (IBAction)textFieldFinished:(id)sender

{

[sender resignFirstResponder];

}

- (void)dealloc {

[textField release];

[super dealloc];

}

@end

在加载应用程序后,点击文本框会弹出键盘。点击“完成”按钮会使文本框失去焦点并收起键盘。如果在textFieldFinished方法中不加入[sender resignFirstResponder]代码,也可以正常工作,但是加入这行代码是更好的做法。

另外,addTarget:action:forControlEvents:方法是用来给文本框添加一个事件处理器,当文本框的编辑事件结束时,会调用指定的方法。而setDelegate:方法是设置文本框的代理对象,用来处理文本框的其他事件。两者可以同时使用。

0