UITextField/UITextView 展示键盘 与 UIMenu 并存方案

  • 目的:UITextField/UITextView使用时展示UIMenu (键盘不下去)

关键点1

修改 UITextField 的响应链顺序,在需要展示UIMenu时让 UITextField 的 nextResponder改成触发展示键盘的控件,在demo中就是赋值给 UIButton。

//CustomTextField/TextView's override nextResponder
- (UIResponder *)nextResponder{ //UITextField 响应链修改位置
   if (self.textFieldResponder) {
      return self.textFieldResponder;
    }
    return [super nextResponder];
}

//showMenuView Action
- (IBAction)btnClick:(UIButton *)sender {

    if (self.textField.isFirstResponder) {
      //键盘弹出时处理,监听 UIMenuControllerWillHideMenuNotification,目标是消失Menu时让TextField的响应链恢复如初
    
        self.textField.textFieldResponder = sender;
    
        [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(menuWillHide) name:UIMenuControllerWillHideMenuNotification object:nil];
    
    }else{
    
        [sender becomeFirstResponder];
    
    }

    //Blablabla Menu展示代码
}

关键点2

修改触发展示键盘的控件

@implementation MenuShowkeyboardControl


- (BOOL)canBecomeFirstResponder{
    return YES;
}

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender{
    BOOL isSame = [NSStringFromSelector(action) isEqualToString:NSStringFromSelector(@selector(cut:))];
    NSLog(@"MenuShowkeyboardControl-\n-isSame->%d--\n,action-> %@,",isSame,NSStringFromSelector(action));
    return isSame;
}


- (void)cut:(id)sender{
    NSLog(@"--cut--");
}

总结

1.UIMenuController这个单例控件用完每次都清空,以免其他场景业务不同不满足需求。
2.响应链顺序决定了UIMenu与键盘能否同时展示的关键。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,031评论 3 119
  • 上周日回来之后,脑子里一直想着W的事情,昨晚想和同学说说,也开了口,但终还是没讲下去。不知为何,竟有一丝心悦。因为...
    颖飞儿阅读 304评论 0 0
  • 寂,黎明―― 谁敲了窗 印上层层感伤 留下泪千行 无棱角的脸 看不清你的面容 模糊了谁的心脏 愈渐陌生 我,是谁?...
    异虫生阅读 355评论 3 3
  • 宝贝 你盈盈如水波荡漾的瞳眸 映照出一片水晶般冰清玉洁的世界 俗世的烟尘还不曾将你浸染 风霜雪雨还没机会甩你脸色 ...
    云水禅心千古情阅读 921评论 16 37
  • 孩子在痛苦中挣扎,我们做父母的也同样在痛苦中煎熬。昨天晚上孩子因为长期不规律作息,不规律饮食,在我面前昏倒...
    长悦_世间美好皆因有你阅读 844评论 4 16