iOS 隐藏键盘各种方法

来源:互联网 发布:淘宝怎么快速上传宝贝 编辑:程序博客网 时间:2024/05/17 06:38
方法一:


弹出UIModalPresentationFormSheet模式
- (IBAction)buttonPressed:(id)sender  
{  
    NSLog(@"Show feedback view now!");  
    UIViewController *fbsheet = [[FeedbackSheet alloc] initWithNibName:@"FeedbackSheet" bundle:nil];  
    fbsheet.modalPresentationStyle = UIModalPresentationFormSheet;  
    [self presentModalViewController:fbsheet animated:YES];  
      
    [fbsheet release];  
}  


但是当在UItextview软盘弹出之后,点击其他区域使用下面代码软盘无法隐藏 
进查询资料之后发现重写disablesAutomaticKeyboardDismissal即可,该api在iOS (4.3 and later)
-(BOOL)disablesAutomaticKeyboardDismissal  
{  
    return NO;  
}  


方法二:


  - (void)viewDidLoad  
{  
    [super viewDidLoad];  
      
    UIToolbar * topView = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)];  
    [topView setBarStyle:UIBarStyleBlack];  
  
    UIBarButtonItem * btnSpace = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];  
    UIBarButtonItem * doneButton = [[UIBarButtonItem alloc] initWithTitle:@"收起键盘" style:UIBarButtonItemStyleDone target:self action:@selector(dismissKeyBoard)];  
    [doneButton setWidth:80];  
      
    NSArray * buttonsArray = [NSArray arrayWithObjects:btnSpace,doneButton,nil];  
    [doneButton release];  
    [btnSpace release];  
      
    [topView setItems:buttonsArray];  
    [feedbackContent setInputAccessoryView:topView];  
}  
  
-(IBAction)dismissKeyBoard  
{  
    [feedbackContent resignFirstResponder];  
}


方法三:


 UINavigationController *nv = [[UINavigationController alloc] initWithRootViewController:searchVC];
    nv.modalPresentationStyle = UIModalPresentationFormSheet;
    [self presentModalViewController:nv animated:YES];


UINavigationController必须用Category的方法实现如下方法,才可以让键盘消失
@interface UINavigationController (DismissKeyboard)
- (BOOL)disablesAutomaticKeyboardDismissal;
@end


@implementation UINavigationController (DismissKeyboard)


- (BOOL)disablesAutomaticKeyboardDismissal
{
    return NO;
}


方法四: 此方法是能解决关闭键盘,可是苹果审核会拒绝使用该api


[tfd_UserName resignFirstResponder];//没起到键盘收起的效果
    @try {
        Class UIKeyboardImpl = NSClassFromString(@"UIKeyboardImpl");
        id activeInstance = [UIKeyboardImpl performSelector:@selector(activeInstance)];
        [activeInstance performSelector:@selector(dismissKeyboard)];
    }
    @catch (NSException *exception) {
        NSLog(@"%@", exception);
    }


方法五:


    //关闭键盘
    [[[UIApplication sharedApplication] keyWindow] endEditing:YES];
 
   想必大家都遇到过一个view上好多输入框,为了关闭弹出的软键盘要遍历然后调用resignFirstResponder的吧?今天竟然发现一个关键这个view上可能      打开的键盘很简单:[self.view endEditing:YES];
   直接ok了。


方法六:


   //关闭键盘
    [[self findFirstResponderBeneathView:self] resignFirstResponder];
 
[[self findFirstResponderBeneathView:self]  becomeFirstResponder];//打开键盘
- (UIView*)findFirstResponderBeneathView:(UIView*)view 
{
    // Search recursively for first responder
    for ( UIView *childView in view.subviews ) {
        if ( [childView respondsToSelector:@selector(isFirstResponder)] && [childView isFirstResponder] ) 
            return childView;
        UIView *result = [self findFirstResponderBeneathView:childView];
        if ( result ) 
            return result;
    }
    return nil;
}
0 0
原创粉丝点击