关闭键盘 - iOS 7中的多个UITextFields

Mil*_*rks 10 xcode objective-c uitextfield ios

在下面你会找到我的主视图控制器的.h和.m文件.

我有3个问题.

1.)因为我有多个uitextfields,我是否必须使用自己的resignFirstResponder语句设置每个字段?2.)我会用哪种方法做到这一点?3.)我的语法是否适合辞职第一响应者?

如果我可以在用户点击字段时关闭键盘而不是点击返回键,那将是非常好的!

我知道之前有人问过并回答过这个问题,但老实说,我仍然有点困惑.

我正在使用故事板,XCode 5和iOS 7.

=============================

.h文件

@interface ViewController : UIViewController <UITextFieldDelegate,UITableViewDelegate,UITableViewDataSource>

@property (weak, nonatomic) IBOutlet UITextField *danceDate;
@property (weak, nonatomic) IBOutlet UITextField *dancePlace;
@property (weak, nonatomic) IBOutlet UITextField *danceTerminal;
@property (weak, nonatomic) IBOutlet UITextField *danceGate;
Run Code Online (Sandbox Code Playgroud)

.m文件

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self retrieveFromParse];

    self.tableView.dataSource = self;
    self.tableView.delegate = self;
    self.navigationItem.rightBarButtonItem = self.editButtonItem;

    // SET DELEGATE HERE
    //
    // if I uncomment 1 of these lines, i'll get an error.
    //
    // _dancePlace.delegate = self; 
    // dancePlace.delegate = self; 
    // dancePlace = self; 

}

- (void)textFieldDidBeginEditing:(UITextField *)textField
{

}

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

    return YES;
}


-(BOOL) textFieldShouldReturn: (UITextField *) textField
{
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

Kam*_*ros 40

请尝试以下方法:

[[self view] endEditing:YES]
Run Code Online (Sandbox Code Playgroud)

  • 这为什么被投票?这是解决键盘的最佳方法,您无需检查单个UITextFields和UITextViews. (3认同)
  • 这是最好的解决方案!应该接受它! (3认同)

小智 33

重新启动textField:所有textField.delegate都应设置为ViewController的对象.然后实现下面的委托方法.

-(BOOL) textFieldShouldReturn: (UITextField *) textField {
[textField resignFirstResponder];
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

要点击View,请关闭键盘:向ViewController.view添加点按手势,如下所示:

//declare a property to store your current responder
@property (nonatomic, assign) id currentResponder;


//in viewDidLoad:

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(resignOnTap:)];
    [singleTap setNumberOfTapsRequired:1];
    [singleTap setNumberOfTouchesRequired:1];
    [self.view addGestureRecognizer:singleTap];
    [singleTap release];

//Implement the below delegate method:

- (void)textFieldDidBeginEditing:(UITextField *)textField {
    self.currentResponder = textField;
}

//Implement resignOnTap:

- (void)resignOnTap:(id)iSender {
    [self.currentResponder resignFirstResponder];
}
// was missing ; after the call --> [self.currentResponder resignFirstResponder]
    // also in textFieldDidEndEditing set self.currentResponder = nil;
Run Code Online (Sandbox Code Playgroud)


小智 5

这个答案适用于 iOS 7 和 arc,

  1. 当用户触摸返回时关闭键盘:在 ViewController 中添加以下操作

    -(IBAction)textFieldReturn:(id)sender
    {
        [sender resignFirstResponder];
    }
    
    Run Code Online (Sandbox Code Playgroud)

接下来,在 main.storyboard 中选择 textField 并从连接检查器控件+拖动“Did End On Exit”事件到视图控制器。

  1. 当用户触摸背景时关闭键盘:在 ViewController 中实现以下方法

     - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    
            UITouch *touch = [[event allTouches] anyObject];
            if ([YOUR_TEXT_FIELD isFirstResponder] && [touch view] != YOUR_TEXT_FIELD) {
                [YOUR_TEXT_FIELD resignFirstResponder];
            }
            [super touchesBegan:touches withEvent:event];
        }
    
    Run Code Online (Sandbox Code Playgroud)