2

私のアプリには次のようなものがあります:

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

使用する2行のどちらが優れているかわからないため、両方を使用します:)テキスト領域が強調表示され、ユーザーが背景を押したときに機能します。

ただし、ユーザーは常に背景を押すとは限らず、入力しようとしている次の要素など、他のページ要素を押すこともあります。

スクリーンショットでは、テキスト領域の下に次の要素があり、そこをクリックしてもキーボードが非表示になりません。ユーザーがさまざまなページ要素をクリックしたとき、およびテキスト領域が強調表示されていないときに、キーボードを非表示にするのを手伝ってくれる人はいますか?

ここに画像の説明を入力してください

これが私の.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
}

注:閉じるテキストフィールドごとに1つ必要です。例えば:

-(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 に答える