2

在我的应用程序中,我有这样的东西:

- (IBAction)backgroundTouch:(id)sender 
{
    [businessDescription resignFirstResponder];
    [self.view endEditing:YES]; 
}

我不确定我使用的两行中哪一个更好,所以我同时使用:) 它在突出显示文本区域并且用户按下背景时起作用。

但用户并不总是按背景,有时会按其他页面元素,例如他们试图填写的下一个元素。

在我的屏幕截图中,我在文本区域下方有下一个元素,当我点击那里时,键盘不会被隐藏。当用户单击各种页面元素以及文本区域碰巧没有突出显示时,谁能帮我隐藏键盘?

在此处输入图像描述

这是我的 .h 文件:

@interface PlanBusinessController : UIViewController

@property (weak, nonatomic) IBOutlet UITextView *businessDescription;

- (IBAction)submitBusiness:(id)sender;
@property (weak, nonatomic) IBOutlet UIButton *buttonProperty;

@property (weak, nonatomic) IBOutlet UITextField *personName;

@property (weak, nonatomic) IBOutlet UITextField *personEmail;

@property (weak, nonatomic) 
    IBOutlet UISwitch *privacy;

@property (weak, nonatomic) IBOutlet UISwitch *wantHelp;

- (IBAction)helpToggle:(id)sender;

@property (weak, nonatomic) IBOutlet UILabel *nameLabel;
@property (weak, nonatomic) IBOutlet UILabel *emailLabel;

@property (weak, nonatomic) IBOutlet 
UIButton *test;

@结尾

这是我的 .m 声明:

#import "PlanBusinessController.h"

@interface PlanBusinessController ()

@end

@implementation PlanBusinessController
@synthesize nameLabel;
@synthesize emailLabel;
@synthesize businessDescription;
@synthesize buttonProperty;
@synthesize personName;
@synthesize personEmail;
@synthesize privacy;
@synthesize wantHelp;
@synthesize test;


-(void)touchesBegan:(NSSet*)touches
{
    UITouch *touch=[touches anyObject];
    UIView *view=touch.view;
    if (![view isEqual:businessDescription])
    {
        //[businessDescription resignFirstReponder];
    }
}

- (IBAction)backgroundTouch:(id)sender 
{
    [businessDescription resignFirstResponder];
    [self.view endEditing:YES]; 
}

谢谢!

4

3 回答 3

4

我在我的程序 ViewController 中使用了这个方法,它工作正常。我会试一试。

//Used with the text fields to dismiss keyboard
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{
    [textField resignFirstResponder];
}

如果你有其他元素,那么在这些元素的方法中也添加[textField resignFirstResponder].

例如,如果他们可以单击一个按钮,请编写如下内容:

-(IBAction)button1:(id)sender
{   
    [textField resignFirstResponder];

     //Do stuff
}

注意:每个要关闭的文本字段都需要一个。例如:

-(IBAction)button1:(id)sender
{   
    [textField resignFirstResponder];
    [textField2 resignFirstResponder];
    []... etc

     //Do stuff
}
于 2012-07-25T18:23:39.837 回答
2

请检查以下代码:

-(void)touchesBegan:(NSSet*)touches
 {
    UITouch *touch = [touches anyObject];
    UIView *textView=touch.view;
    if (![textView isKindOfClass:[UITextView class]])
    {
        [businessDescription resignFirstResponder];
    }
 }

当你触摸一个对象时,它会检查,被触摸的对象是不是类型UITextView,如果不是,它将结束编辑。

于 2012-07-25T18:59:56.757 回答
1

一种简单的方法是捕捉发生触摸的视图。并将其与文本区域进行比较。如果视图或(其他类似按钮的东西)与文本区域不同,那么您可以隐藏键盘。这是伪代码:

 -(void)touchesBegan:(NSSet*)touches
 {
    UITouch *touch=[touches anyObject];
    UIView *view=touch.view;
       if (![view isEqual:textArea])
        [textarea resignFirstReponder];
 }
于 2012-07-25T18:26:39.497 回答