Answers:
我将的代表设置UITextField
为我的ViewController
班级。
在该类中,我按以下方式实现了此方法:
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return NO;
}
NO
而不是YES
?
NO
您可以避免在文本中添加一行返回。
如果将文本字段的DidEndOnExit事件连接到InterfaceBuilder中的一个动作(IBAction),则当用户关闭键盘(带有返回键)时,它将收到消息,并且发送者将是触发该事件的UITextField的引用。
例如:
-(IBAction)userDoneEnteringText:(id)sender
{
UITextField theField = (UITextField*)sender;
// do whatever you want with this text field
}
然后,在InterfaceBuilder中,将文本字段的DidEndOnExit事件链接到控制器上的此操作(或用于从UI链接事件的任何操作)。每当用户输入文本并关闭文本字段时,就会向控制器发送此消息。
您也可以在控制器中创建方法
-(IBAction)editingEnded:(id)sender{
[sender resignFirstResponder];
}
然后在IB的连接检查器中,将事件“退出时结束”连接到该事件。
kubi,谢谢。您的代码有效。只要是明确的(新手喜欢)你说你要设置UITextField
的delegate
等于到ViewController在文本字段所在。您可以随时随地执行此操作。我选择了viewDidLoad
方法。
- (void)viewDidLoad
{
// sets the textField delegates to equal this viewController ... this allows for the keyboard to disappear after pressing done
daTextField.delegate = self;
}
delegate
此处设置文本字段。如上所述,您不必以编程方式执行此操作。两种方法都可以正常工作。
这是一个无需任何代码即可自动关闭键盘的行为的技巧。在笔尖中,在身份检查器中编辑“第一响应者”代理对象,添加一个新的“第一响应者”操作;让我们称之为dummy:
。现在,将文本字段的“退出时结束结束”事件挂钩到“ dummy:
第一响应者”代理对象的操作。而已!由于文本字段的“退出时结束结束”事件现在具有一个“操作目标”对,因此,当用户单击“返回”时,文本字段会自动关闭其键盘。并且由于没有为在响应方链上发送的消息寻找处理程序而没有任何惩罚,因此即使在dummy:
任何地方都没有实现,该应用程序也不会崩溃。
在Swift中,您可以在Controller中编写IBAction 并将文本字段的Did End End Exit事件设置为该动作
@IBAction func returnPressed(sender: UITextField) {
self.view.endEditing(true)
}
Swift 4.2
并且将100%工作
import UIKit
class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var textField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
self.textField.delegate = self
}
// hide key board when the user touches outside keyboard
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.view.endEditing(true)
}
// user presses return key
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
}
这是我要使其正常工作所要做的,并且我认为对于拥有键盘数字键盘的任何人(或任何其他未完成按钮的人来说)都是必要的:
我创建了一个名为
-(IBAction)backgroundIsTapped:(id)sender
这也在.h文件中定义。
之后,我链接到Interface Builder中ViewController的“触地得分”位。
在“后台被窃听”功能中,我这样输入:
[answerField resignFirstResponder];
只要记住将“ answerField”更改为要从中删除键盘的UITextField的名称即可(显然,请确保您的UITextField的定义如下:)
IBOutlet UITextField * <nameoftextfieldhere>;
我知道这个话题可能很久以前就死了...但是我希望这会在某处对某人有所帮助!
您会注意到,方法“ textFieldShouldReturn”提供了按DONE键的文本字段对象。如果设置了TAG,则可以打开该文本字段。或者,您可以跟踪对象的指针并将其与创建者存储的某些成员值进行比较。
我的学习方法是这样的:
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
NSLog(@"%s", __FUNCTION__);
bool fDidResign = [textField resignFirstResponder];
NSLog(@"%s: did %resign the keyboard", __FUNCTION__, fDidResign ? @"" : @"not ");
return fDidResign;
}
同时,我进行了“验证”测试以拒绝辞职。仅用于说明,因此,如果用户键入NO!进入战场,它不会被解雇。行为是我想要的,但是输出顺序却不符合我的预期。
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
NSLog(@"%s", __FUNCTION__);
if( [[textField text] isEqualToString:@"NO!"] ) {
NSLog(@"%@", textField.text);
return NO;
} else {
return YES;
}
}
以下是我针对拒绝的NSLog输出,然后是接受。您会注意到我正在返回辞职的结果,但是我希望它返回FALSE给我,以便向呼叫者报告?除此之外,它还有必要的行为。
13.313 StudyKbd [109:207]-[StudyKbdViewController textFieldShouldReturn:] 13.320 StudyKbd [109:207]-[StudyKbdViewController textFieldShouldEndEditing:] 13.327 StudyKbd [109:207]不! 13.333 StudyKbd [109:207]-[StudyKbdViewController textFieldShouldReturn:]:确实辞职了键盘 59.891 StudyKbd [109:207]-[StudyKbdViewController textFieldShouldReturn:] 59.897 StudyKbd [109:207]-[StudyKbdViewController textFieldShouldEndEditing:] 59.917 StudyKbd [109:207]-[StudyKbdViewController doneEditText]:否 59.928 StudyKbd [109:207]-[StudyKbdViewController textFieldShouldReturn:]:辞职了吗?
这是一种非常干净的方法,可以使用Return键或在后台触摸来结束版本。
在“界面”构建器中,将您的字段嵌入到UIFormView类的视图中
这堂课是什么:
这是代码:
接口
#import <UIKit/UIKit.h>
@interface UIFormView : UIView<UITextFieldDelegate>
-(BOOL)textFieldValueIsValid:(UITextField*)textField;
-(void)endEdit;
@end
实作
#import "UIFormView.h"
@implementation UIFormView
{
UITextField* currentEditingTextField;
}
// Automatically register fields
-(void)addSubview:(UIView *)view
{
[super addSubview:view];
if ([view isKindOfClass:[UITextField class]]) {
if ( ![(UITextField*)view delegate] ) [(UITextField*)view setDelegate:self];
}
}
// UITextField Protocol
-(void)textFieldDidBeginEditing:(UITextField *)textField
{
currentEditingTextField = textField;
}
-(void)textFieldDidEndEditing:(UITextField *)textField
{
currentEditingTextField = NULL;
}
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
[self endEdit];
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
if ([self textFieldValueIsValid:textField]) {
[self endEdit];
return YES;
} else {
return NO;
}
}
// Own functions
-(void)endEdit
{
if (currentEditingTextField) {
[currentEditingTextField endEditing:YES];
currentEditingTextField = NULL;
}
}
// Override this in your subclass to handle eventual values that may prevent validation.
-(BOOL)textFieldValueIsValid:(UITextField*)textField
{
return YES;
}
@end
通过子类化表单并覆盖
textFieldValueIsValid:
方法,如果该值对于给定字段不正确,则可以避免版本终止。
如果字段在Interface Builder中设置了委托,则表单不会更改它。我看不出有很多理由为特定领域设置不同的代表,但是为什么不……
有很多方法可以改进此表单视图类-附加一个委托,进行一些布局,在键盘覆盖一个字段时进行处理(使用currentEditingTextField frame),自动为下一个字段启动版本,...
我个人将其保留在我的框架中,并且始终将其子类化以添加功能,“按原样”通常很有用。
我希望这会有所帮助。欢呼全部
如果要在UIViewController中进行所有编辑,则可以使用。
[[self view]endEditing:YES];
如果要关闭垂直的UITextField键盘,请使用隐藏。
1.在您的viewcontroller.h中添加委托
<UITextFieldDelegate>
使代表团无法访问您的文本字段。
self.yourTextField.delegate =自我;
将此方法添加到您的viewcontroller中。
-(BOOL)textFieldShouldEndEditing:(UITextField *)textField {[textField resignFirstResponder]; 返回是;}
在Swift 3中以编程方式设置UITextField的委托
在ViewController.Swift文件中实现UITextFieldDelegate(例如,类ViewController:UIViewController,UITextFieldDelegate {)
lazy var firstNameTF: UITextField = {
let firstname = UITextField()
firstname.placeholder = "FirstName"
firstname.frame = CGRect(x:38, y: 100, width: 244, height: 30)
firstname.textAlignment = .center
firstname.borderStyle = UITextBorderStyle.roundedRect
firstname.keyboardType = UIKeyboardType.default
firstname.delegate = self
return firstname
}()
lazy var lastNameTF: UITextField = {
let lastname = UITextField()
lastname.placeholder = "LastName"
lastname.frame = CGRect(x:38, y: 150, width: 244, height: 30)
lastname.textAlignment = .center
lastname.borderStyle = UITextBorderStyle.roundedRect
lastname.keyboardType = UIKeyboardType.default
lastname.delegate = self
return lastname
}()
lazy var emailIdTF: UITextField = {
let emailid = UITextField()
emailid.placeholder = "EmailId"
emailid.frame = CGRect(x:38, y: 200, width: 244, height: 30)
emailid.textAlignment = .center
emailid.borderStyle = UITextBorderStyle.roundedRect
emailid.keyboardType = UIKeyboardType.default
emailid.delegate = self
return emailid
}()
//标记:-处理委托textField。
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
view.endEditing(true)
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if textField == firstNameTF {
lastNameTF.becomeFirstResponder()
}
else if textField == lastNameTF {
emailIdTF.becomeFirstResponder()
}
else {
view.emailIdTF(true)
}
return true
}
创建一个函数hidekeyboard并将其链接到.xib文件中的文本字段,然后选择DidEndOnExit
-(IBAction)Hidekeyboard
{
textfield_name.resignFirstResponder;
}
试试这个
- (BOOL) textView: (UITextView*) textView shouldChangeTextInRange: (NSRange) range replacementText: (NSString*) text
{
if ([text isEqualToString:@"\n"]) {
[textView resignFirstResponder];
return NO;
}
return YES;
}
//====================================================
// textFieldShouldReturn:
//====================================================
-(BOOL) textFieldShouldReturn:(UITextField*) textField {
[textField resignFirstResponder];
if(textField.returnKeyType != UIReturnKeyDone){
[[textField.superview viewWithTag: self.nextTextField] becomeFirstResponder];
}
return YES;
}
任何寻找Swift 3的人
1)确保将UITextField的Delegate连接到情节提要中的ViewController
2)在ViewController.Swift文件中实现UITextFieldDelegate(例如,类ViewController:UIViewController,UITextFieldDelegate {)
3)使用下面的委托方法
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder()
return false }
这是我在Swift 4.2中关闭键盘的方式,它对我有用:
override func viewDidLoad() {
super.viewDidLoad()
let tap = UITapGestureRecognizer(target: self, action:
#selector(dismissKeyboard))
view.addGestureRecognizer(tap)
}
@objc func dismissKeyboard (_ sender: UITapGestureRecognizer) {
numberField.resignFirstResponder()
}
Swift 3,iOS 9以上版本
@IBAction private func noteFieldDidEndOnExit(_ sender: UITextField) {}
UPD:它对我仍然很好。我认为专门回答此问题的人只是不了解他需要将此操作绑定到情节提要上的UITextField。