html5中文学习网

您的位置: 首页 > ios » 正文

iOS虚拟键盘上添加动态隐藏按钮_IOS开发

[ ] 已经帮助:人解决问题

  想在键盘上添加一个按钮,实时根据键盘不同高度变换按钮位置,再不做输入的时候点击按钮能够隐藏键盘,这种方式在很多软件上都有体现,然后在网上查阅了关于检测键盘高度一些相关知识,以下是一个Demo,代码有很多需要优化地方,仅供需要者参考;N7vHTML5中文学习网 - HTML5先行者学习网

  先看效果:N7vHTML5中文学习网 - HTML5先行者学习网

iOS虚拟键盘上添加动态隐藏按钮 三联

  首先是我们在ViewDidLoada()中注册了两个通知,[NSNotificationCenterdefaultCenter],检测键盘动态,一个是键盘将要弹出的时候,另一个是键盘将要退出时候键盘的信息N7vHTML5中文学习网 - HTML5先行者学习网

  - (void)viewDidLoadN7vHTML5中文学习网 - HTML5先行者学习网

  {N7vHTML5中文学习网 - HTML5先行者学习网

  NSLog(@"%@",NSStringFromSelector(_cmd));N7vHTML5中文学习网 - HTML5先行者学习网

  [super viewDidLoad];N7vHTML5中文学习网 - HTML5先行者学习网

  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleKeyboardDidShow:) name:UIKeyboardWillShowNotification object:nil];N7vHTML5中文学习网 - HTML5先行者学习网

  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleKeyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];N7vHTML5中文学习网 - HTML5先行者学习网

  }N7vHTML5中文学习网 - HTML5先行者学习网

  检测键盘消息一个六种,根据字面意思差不多都能说明函数作用N7vHTML5中文学习网 - HTML5先行者学习网

  UIKeyboardWillShowNotification 通知将要发布时候显示键盘N7vHTML5中文学习网 - HTML5先行者学习网

  UIKeyboardDidShowNotification  通知发布后立即显示键盘N7vHTML5中文学习网 - HTML5先行者学习网

  UIKeyboardWillHideNotification 通知发布前撤销键盘N7vHTML5中文学习网 - HTML5先行者学习网

  UIKeyboardDidHideNotification 通知发布后撤销键盘N7vHTML5中文学习网 - HTML5先行者学习网

  UIKeyboardWillChangeFrameNotification 通知发布前迅速变化的框架的键盘。N7vHTML5中文学习网 - HTML5先行者学习网

  UIKeyboardDidChangeFrameNotification 通知发布后立即改变在键盘的框架。N7vHTML5中文学习网 - HTML5先行者学习网

  NSLog(@"%@",NSStringFromSelector(_cmd));是我特意加上去的,它能在控制台显示打印出当前程序所调用的函数,我在下面每个函数都加了这一句,当我进行不同操作的时候,打印出被调用函数名,在调试程序时候比较适用吧;N7vHTML5中文学习网 - HTML5先行者学习网

  注册消息通知后,实现通知所响应的方法N7vHTML5中文学习网 - HTML5先行者学习网

  - (void)handleKeyboardDidShow:(NSNotification *)notificationN7vHTML5中文学习网 - HTML5先行者学习网

  {N7vHTML5中文学习网 - HTML5先行者学习网

  NSLog(@"%@",NSStringFromSelector(_cmd));N7vHTML5中文学习网 - HTML5先行者学习网

  NSDictionary *info = [notification userInfo];N7vHTML5中文学习网 - HTML5先行者学习网

  CGRect keyboardFrame;N7vHTML5中文学习网 - HTML5先行者学习网

  [[info objectForKey:UIKeyboardFrameEndUserInfoKey] getValue:&keyboardFrame];N7vHTML5中文学习网 - HTML5先行者学习网

  CGSize kbSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey]CGRectValue].size;N7vHTML5中文学习网 - HTML5先行者学习网

  CGFloat distanceToMove = kbSize.height;N7vHTML5中文学习网 - HTML5先行者学习网

  NSLog(@"---->动态键盘高度:%f",distanceToMove);N7vHTML5中文学习网 - HTML5先行者学习网

  if (exitButton == nil) {N7vHTML5中文学习网 - HTML5先行者学习网

  exitButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];N7vHTML5中文学习网 - HTML5先行者学习网

  CGRect exitBtFrame = CGRectMake(self.view.frame.size.width-40, self.view.frame.size.height - distanceToMove, 40.0f, 30.0f);N7vHTML5中文学习网 - HTML5先行者学习网

  exitButton.frame = exitBtFrame;N7vHTML5中文学习网 - HTML5先行者学习网

  [exitButton setImage:[UIImage imageNamed:@"DoneDown.png"] forState:UIControlStateNormal];N7vHTML5中文学习网 - HTML5先行者学习网

  [self.view addSubview:exitButton];N7vHTML5中文学习网 - HTML5先行者学习网

  }N7vHTML5中文学习网 - HTML5先行者学习网

  exitButton.hidden=NO;N7vHTML5中文学习网 - HTML5先行者学习网

  [self adjustPanelsWithKeyBordHeight:distanceToMove];N7vHTML5中文学习网 - HTML5先行者学习网

  [exitButton addTarget:self action:@selector(CancelBackKeyboard:) forControlEvents:UIControlEventTouchDown];N7vHTML5中文学习网 - HTML5先行者学习网

  }N7vHTML5中文学习网 - HTML5先行者学习网

  在这个函数方法中值得探讨的是关于键盘所包含信息,因为每一次键盘弹出的时候也是动画形式弹出,他的坐标位置大小包含在userInfo的字典中,现在我用N7vHTML5中文学习网 - HTML5先行者学习网

  NSLog(@"-->info:%@",info);打印出info对象,这些信息都可以在不同存储类型,取值的时候注意取值方式,此处只是提一提,希望以后有时间在做探讨,N7vHTML5中文学习网 - HTML5先行者学习网

  在这一段代码上,后面注释了5行,因为打算当键盘推出的时候,按钮从视图上移除,或者释放按钮,但是都导致了应用程序崩溃,后来就没有释放和移除操作了N7vHTML5中文学习网 - HTML5先行者学习网

  - (void)handleKeyboardWillHide:(NSNotification *)notificationN7vHTML5中文学习网 - HTML5先行者学习网

  {N7vHTML5中文学习网 - HTML5先行者学习网

  NSLog(@"%@",NSStringFromSelector(_cmd));N7vHTML5中文学习网 - HTML5先行者学习网

  if (exitButton.hidden==NO) {N7vHTML5中文学习网 - HTML5先行者学习网

  exitButton.hidden = YES;N7vHTML5中文学习网 - HTML5先行者学习网

  }N7vHTML5中文学习网 - HTML5先行者学习网

  // if (exitButton.superview)N7vHTML5中文学习网 - HTML5先行者学习网

  // {N7vHTML5中文学习网 - HTML5先行者学习网

  // [exitButton removeFromSuperview];N7vHTML5中文学习网 - HTML5先行者学习网

  // [exitButton release];N7vHTML5中文学习网 - HTML5先行者学习网

  // }N7vHTML5中文学习网 - HTML5先行者学习网

  }N7vHTML5中文学习网 - HTML5先行者学习网

  -(void)adjustPanelsWithKeyBordHeight:(float) heightN7vHTML5中文学习网 - HTML5先行者学习网

  {N7vHTML5中文学习网 - HTML5先行者学习网

  NSLog(@"%@",NSStringFromSelector(_cmd));N7vHTML5中文学习网 - HTML5先行者学习网

  if (exitButton) {N7vHTML5中文学习网 - HTML5先行者学习网

  CGRect exitBtFrame = CGRectMake(self.view.frame.size.width - 40, self.view.frame.size.height - height-30, 40.0f, 30.0f);N7vHTML5中文学习网 - HTML5先行者学习网

  exitButton.frame = exitBtFrame;N7vHTML5中文学习网 - HTML5先行者学习网

  [self.view addSubview:exitButton];N7vHTML5中文学习网 - HTML5先行者学习网

  }N7vHTML5中文学习网 - HTML5先行者学习网

  // UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];N7vHTML5中文学习网 - HTML5先行者学习网

  // if (exitButton.superview == nil)N7vHTML5中文学习网 - HTML5先行者学习网

  // {N7vHTML5中文学习网 - HTML5先行者学习网

  // [tempWindow addSubview:exitButton];N7vHTML5中文学习网 - HTML5先行者学习网

  // // 注意这里直接加到window上N7vHTML5中文学习网 - HTML5先行者学习网

  // }N7vHTML5中文学习网 - HTML5先行者学习网

  }N7vHTML5中文学习网 - HTML5先行者学习网

  -(void)CancelBackKeyboard:(id)senderN7vHTML5中文学习网 - HTML5先行者学习网

  {N7vHTML5中文学习网 - HTML5先行者学习网

  NSLog(@"%@",NSStringFromSelector(_cmd));N7vHTML5中文学习网 - HTML5先行者学习网

  [textField resignFirstResponder];N7vHTML5中文学习网 - HTML5先行者学习网

  }N7vHTML5中文学习网 - HTML5先行者学习网

  - (void)viewDidUnloadN7vHTML5中文学习网 - HTML5先行者学习网

  {N7vHTML5中文学习网 - HTML5先行者学习网

  [self setTextField:nil];N7vHTML5中文学习网 - HTML5先行者学习网

  exitButton=nil;N7vHTML5中文学习网 - HTML5先行者学习网

  [super viewDidUnload];N7vHTML5中文学习网 - HTML5先行者学习网

  // Release any retained subviews of the main view.N7vHTML5中文学习网 - HTML5先行者学习网

  }N7vHTML5中文学习网 - HTML5先行者学习网

  - (void)dealloc {N7vHTML5中文学习网 - HTML5先行者学习网

  [textField release];N7vHTML5中文学习网 - HTML5先行者学习网

  [exitButton release];N7vHTML5中文学习网 - HTML5先行者学习网

  [[NSNotificationCenter defaultCenter] removeObserver:self];//移除所注册的通知N7vHTML5中文学习网 - HTML5先行者学习网

  [super dealloc];N7vHTML5中文学习网 - HTML5先行者学习网

  }N7vHTML5中文学习网 - HTML5先行者学习网

(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助