关闭键盘 - iOS 7中的多个UITextFields [英] Dismiss The Keyboard - Multiple UITextFields in iOS 7

查看:167
本文介绍了关闭键盘 - iOS 7中的多个UITextFields的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面你会找到我的.h&我的主viewcontroller的.m文件。



我有3个问题。



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



当用户点击字段时,如果我可以解除键盘,那将是非常好的点击返回键!



我知道之前已经被问过并回答过,但说实话,我仍然有点困惑。



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



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



.h文件

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

@property(弱,非原子)IBOutlet UITextField * danceDate;
@property(弱,非原子)IBOutlet UITextField * dancePlace;
@property(弱,非原子)IBOutlet UITextField * danceTerminal;
@property(弱,非原子)IBOutlet UITextField * danceGate;

.m文件

  #importViewController.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
//
//如果我取消注释其中一行,我会收到错误。
//
// _dancePlace.delegate = self;
// dancePlace.delegate = self;
// dancePlace = self;

}

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

}

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

返回YES;
}


- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
返回YES;
}


解决方案

辞去textField:
所有textField.delegate都应设置为ViewController的对象。
然后实现下面的委托方法。

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

要点击视图关闭键盘:
添加点按对ViewController.view的手势如下:

  //声明一个属性来存储当前的响应者
@property( nonatomic,assign)id currentResponder;


//在viewDidLoad中:

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

//实现以下委托方法:

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

//实施resignOnTap:

- (无效)resignOnTap:(id)iSender {
[self.currentResponder resignFirstResponder];
}
//丢失了;通话结束后 - > [self.currentResponder resignFirstResponder]
//也在textFieldDidEndEditing中设置self.currentResponder = nil;


below you'll find my .h & .m files for my primary viewcontroller.

I have 3 questions.

1.) Because I have multiple uitextfields, do I have to set each with their own resignFirstResponder statement ? and 2.) where would I do that, in what method ? 3.) Is my syntax right for resigning the first responder ?

Also it would be really nice if I could dismiss the keyboard when the user clicks out of the field NOT on hitting the return key!

I know this has been asked and answered before, but to be honest with you i'm still a little confused as to what goes where.

I'm using storyboards, with XCode 5, and iOS 7.

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

.h file

@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;

.m file

#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;
}

解决方案

Resigning the textField: All your textField.delegate should be set as ViewController's object. And then implement the below delegate method.

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

To dismiss Keyboard on tap of the View: Add a Tap gesture to your ViewController.view as follows:

//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;

这篇关于关闭键盘 - iOS 7中的多个UITextFields的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆