开发者

How to build a bar on the keyboard

开发者 https://www.devze.com 2022-12-27 00:41 出处:网络
I want to dismiss keyboard开发者_C百科 by click dismiss button ,How to build a bar on the keyboard? like this:

I want to dismiss keyboard开发者_C百科 by click dismiss button ,How to build a bar on the keyboard? like this:

How to build a bar on the keyboard

(source: alexcurylo.com)


It was answered here. Basically, you send a resignFirstResponder message to the UITextView. Of course, you will put that code on your button's delegate.


Try to put following code. It might work for you.

Put following variables in your viewController.h file

UIToolbar *keyboardToolbar;

    id notisender;

    BOOL isAlreadyResigned;
    float kx,ky,kh,kw;

Now put following code in you viewController.m file.

- (void)viewDidLoad {
    [super viewDidLoad];

}

-(void)viewWillAppear:(BOOL)animated{
    isAlreadyResigned=YES;
    [self keyboardToolbarShouldShow];
    [self keyboardToolbarShouldShow];
    [super viewWillAppear:animated];
}

-(void)viewWillDisappear:(BOOL)animated{
    [self keyboardToolbarShouldNotShow];
    [super viewWillDisappear:animated];
}



#pragma mark keyboardWillShow methods
-(void)keyboardToolbarShouldShow {
    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(keyboardWillShow:) 
                                                 name:UIKeyboardWillShowNotification 
                                               object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(keyboardhide:) 
                                                 name:UIKeyboardWillHideNotification 
                                               object:nil];
}

-(void)keyboardToolbarShouldNotShow {
    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:UIKeyboardWillShowNotification 
                                                  object:nil];

    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:UIKeyboardWillHideNotification 
                                                  object:nil];
    if(!isAlreadyResigned){
        [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillNotShow:)
                                                 name:UIKeyboardWillShowNotification
                                               object:nil];
        [GEEtxtMsg becomeFirstResponder];
    }
}

-(void)keyboardWillShow : (NSNotification *)sender {
    @try  {
//      NSLog(@"notification in first view");
        for (UIWindow *keyboardWindow in [[UIApplication sharedApplication] windows]) { 
            for (UIView *keyboard in [keyboardWindow subviews]) {
                NSLog(@"keyboard description - %@",[keyboard description]);
                if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES) {
                    NSValue *v = [[sender userInfo] valueForKey:UIKeyboardBoundsUserInfoKey];
                    CGRect kbBounds = [v CGRectValue];
                    if(keyboardToolbar == nil) {
                        keyboardToolbar = [[UIToolbar alloc] initWithFrame:CGRectZero];
                        keyboardToolbar.barStyle=UIBarStyleBlackOpaque;
                        keyboardToolbar.tintColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1];
                        UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleBordered target:self action:@selector(dismissKeyboard)];
                        UIBarButtonItem *flex = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
                        NSArray *items = [[NSArray alloc] initWithObjects:flex, barButtonItem, nil];
                        [keyboardToolbar setItems:items];
                        [items release];
                    }               
                    [keyboardToolbar removeFromSuperview];
                    keyboardToolbar.frame = CGRectMake(0, 0, kbBounds.size.width, 45);
                    [keyboard addSubview:keyboardToolbar];
                    NSLog(@"x=%f y=%f width=%f height=%f",kbBounds.origin.x, kbBounds.origin.y, kbBounds.size.width, kbBounds.size.height);
                    kx=kbBounds.origin.x; ky=kbBounds.origin.y;
                    kh=kbBounds.size.height; kw=kbBounds.size.width;
                    keyboard.bounds = CGRectMake(kbBounds.origin.x, kbBounds.origin.y, kbBounds.size.width, kbBounds.size.height + 87);
                    isAlreadyResigned=NO;
                    for(UIView* subKeyboard in [keyboard subviews]) {
                        if([[subKeyboard description] hasPrefix:@"<UIKeyboardImpl"] == YES) {
                            subKeyboard.bounds = CGRectMake(kbBounds.origin.x, kbBounds.origin.y - 45, kbBounds.size.width, kbBounds.size.height);  
                        }                       
                    }
                }
            }
        }
    } @catch (NSException * e) {
        NSLog(@"Problem in keyboardWillShow:%@",e);
    }
}

-(void)keyboardWillNotShow : (NSNotification *)sender {
    @try  {
        for (UIWindow *keyboardWindow in [[UIApplication sharedApplication] windows]) {
            for (UIView *keyboard in [keyboardWindow subviews]) {
                if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES) {
//                  NSValue *v = [[sender userInfo] valueForKey:UIKeyboardBoundsUserInfoKey];
//                  CGRect kbBounds = [v CGRectValue];
                    if([[keyboard subviews] containsObject:keyboardToolbar]){
                        [keyboardToolbar removeFromSuperview];
                    }
                    if(!isAlreadyResigned){
                        isAlreadyResigned=YES;
                        keyboard.bounds = CGRectMake(kx,ky,kw,kh);
                        [[NSNotificationCenter defaultCenter] removeObserver:self
                                                                        name:UIKeyboardWillShowNotification 
                                                                      object:nil];
                        for(UIView* subKeyboard in [keyboard subviews]) {
                            if([[subKeyboard description] hasPrefix:@"<UIKeyboardImpl"] == YES) {
                                subKeyboard.bounds = CGRectMake(0, 0,0, 0); 
                            }                       
                        }
                    }
                }
            }
        }
    } @catch (NSException * e) {
        NSLog(@"Problem in keyboardWillShow:%@",e);
    }
}

-(void)dismissKeyboard {    
    [self resignTextFields];
}

-(void)keyboardhide:(NSNotification *)noti {
    notisender = noti;
}


Here you can build a bar on a keyboard Take static toolbar on xib and take one button and put it on toolbar, and make toolbar hidden ,now write code in your method when you create a toolbar ,like if you want to create toolbar on textview begin editing method then,

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView
{
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.26];
    [tlBar setFrame:CGRectMake(0, 220, 320, 44)];
    tlBar.hidden=NO;
    [UIView commitAnimations];
}

And when you dismiss keyboard write this method and call this method when toolbar button pressed

-(IBAction)kbAway:(id)sender
{
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.3];
    [tlBar setFrame:CGRectMake(0, 480, 320, 44)];
    [UIView commitAnimations];
    [txtviewmessage resignFirstResponder];
    [txtsubject resignFirstResponder];
    [txttemplatename resignFirstResponder];
}

Hope this will help you..

0

精彩评论

暂无评论...
验证码 换一张
取 消