iOS點擊鍵盤以外空白區域隱藏鍵盤的常見方法


iOS開發中,經常要用到輸入框,可默認情況下,輸入框出來之后,除非點擊鍵盤上面的“Done”或“Next”按鈕才能將其隱藏。站在用戶體驗的角度上看,這種情況很不友好,尤其是不能突顯蘋果操作的便捷性。因此,查閱了一些資料,加上實踐,總結出了兩種方法:

 

第一種,是最常見的,就是給最外層的view添加一個手勢響應UITapGestureRecognizer,代碼如下:

- (void)viewDidLoad
{
    [super viewDidLoad];
    UITapGestureRecognizer *tapGr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewTapped:)];
    tapGr.cancelsTouchesInView = NO;
    [self.view addGestureRecognizer:tapGr];
}

-(void)viewTapped:(UITapGestureRecognizer*)tapGr
{
    [activitySearchBar resignFirstResponder];
}

第二種,稍微復雜些,不過思路也差不多,就是將最外層的view作為一個UIScrollView,點擊即可將當前的焦點交給UIScrollView,代碼如下:

#import <UIKit/UIKit.h>
#import "BaseData.h"

@interface BaseTextFieldView : UIScrollView {
	id target;
	int ypos,y;
}
-(void)setTarget:(id)d;

@end

  

#import "BaseTextFieldView.h"

@implementation BaseTextFieldView

- (id)initWithFrame:(CGRect)frame {
    
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code.
    }
    return self;
}

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
	[target performSelector:@selector(endEdit)];
	return YES;
}

-(void)setTarget:(id)d
{
	ypos = 0;
	target = d;
}

-(BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view
{
	return YES;
}

- (void)dealloc {
    [super dealloc];
}

 在需要調用的Controller的.h文件添加對UITextFieldDelegate的引用,代碼如下:

#import "BaseTextFieldView.h"

  

@interface DemoController : UIViewController <UITextFieldDelegate>{
	
}

 將xib文件的view,改成對BaseTextFieldView的引用,如圖:

    

在Controller的.m文件中,添加代碼:

[(BaseTextFieldView *)self.view setTarget:self];

  

以上兩種方法經測試均可實現。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM