iOS UI: UIMenuController | InputView 折腾记

运筹优化算法工程师入门指南:从数学基础到实战项目(附学习资源清单) 本文为运筹优化算法工程师提供全面的入门指南,涵盖数学基础、技术工具链和实战项目。从线性代数到动态规划,详细解析核心数学学科和建模方法论,并推荐Python、C++等编程工具及Gurobi、CPLEX等求解器。通过车辆路径问题(VRP)和生产排程案例,展示运筹优化在物流和制造领域的实际应用,附赠学习资源清单助力快速入门。 阅读详情

本来 UIMenuController 这个东西挺简单的.
直到…
遇到 InputView, 我就醉了, 程序也崩溃了.

这里以 Demo 为主, 来说明问题.


实现的效果很简单, 如下图

1


ViewController.m

#import "ViewController.h"

@interface ViewController ()

// 罪魁祸首在这里
@property (nonatomic, strong) UIView *inputView;

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self config];
}

// 这个方法必须重写, 否则不显示菜单
- (BOOL)canBecomeFirstResponder
{
    return YES;
}

- (void)config
{
    CGRect inputFrame = CGRectMake(100, 200, 200, 100);
    _inputView = [[UIView alloc] initWithFrame:inputFrame];
    [self.view addSubview:_inputView];

    CGRect bFrame = CGRectMake(100, 120, 120, 60);
    UIButton *btn = [[UIButton alloc] initWithFrame:bFrame];
    btn.backgroundColor = [UIColor greenColor];
    btn.titleLabel.font = [UIFont systemFontOfSize:14.f];
    btn.layer.borderWidth = 1.f;
    btn.layer.cornerRadius = 5.f;
    btn.layer.masksToBounds = YES;
    btn.layer.borderColor = [UIColor redColor].CGColor;
    [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    [btn setTitle:@"点我弹出菜单" forState:UIControlStateNormal];

    btn.userInteractionEnabled = YES;
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self
                                                                          action:@selector(onTap:)];
    [btn addGestureRecognizer:tap];

    [self.view addSubview:btn];
}

- (void)onTap:(UITapGestureRecognizer *)recognizer
{
    // 写与不写, 暂时没有发现有什么卵用
    [self becomeFirstResponder];

    UIMenuController *menu = [UIMenuController sharedMenuController];
    UIMenuItem *delete = [[UIMenuItem alloc] initWithTitle:@"删除" action:@selector(deleteBtnClick)];
    NSArray *array = [NSArray arrayWithObjects:delete, nil];
    [menu setMenuItems:array];
    [menu setTargetRect:recognizer.view.frame inView:recognizer.view.superview];
    [menu setMenuVisible:YES animated:YES];
}

- (void)deleteBtnClick
{
    NSLog(@"tap the delete menu item");
}

@end

在 iOS8 | iOS9 上面运行起来, 就 crash.
但是 iOS7 就安然无事.

crash 信息大概这个样子

Terminating app due to uncaught exception ‘UIViewControllerHierarchyInconsistency’,
reason: ‘child view controller: should have parent view controller: but requested parent is:’

最终找到问题在于, 声明并使用了一个全局 inputView.
注意, 不添加该 InputView, 也不会有问题, 即注释下面代码

[self.view addSubview:_inputView];

查阅文档知道, 从 iOS8 起, 需要检查 InputView 不应该有父视图.

可以看看, UIKit 里面的 inputView
2

解决方案

1.将原来的 inputView 改个名字.

2.不要使用全局变量 InputView.

iOS inputView 和 inputAccessoryView UITextFields and UITextViews have an inputAccessoryView property,which you can set to any view, that is automatically displayed above and animated with the keyboard. Note that the view you use shou 阅读详情

相关推荐

自定义键盘 - inputView与inputAccessoryView的使用

iOS系统提供了多种键盘,我们可以通过Enum类型设置。但有的时候由于某些特殊业务的需要,我们不得不自定义键盘。 说到自定义键盘,就得说起inputView和inputAccessoryView了。 inputView是键盘的主体部分,inputAccessoryView则相当于键盘上的工具栏。 UITextInput 协议 键盘构建的重点在于将输出的内容显示到输入框中。由于输入框都遵循了...

qq_28245553的博客 2170

UIInputViewController为基础的自定义键盘

iOS8系统中开放了自定义输入法。主要是用UIInputViewController来创建自定义的键盘。自定义键盘的界面放在UIInputVieController的inputView属性中。 Xcode6提供了一个建立自定义键盘的入口---自定义键盘目标模版。 自定义键盘的基本数据结构如下: 自定义的输入法模板包含一个UIInputViewController 的子类,

lcl130的专栏 9684

iOS逆向工程-输入法开发-键盘扩展-第三方输入法App实现原理与逆向分析-基于Objective-C的输入法Demo开发与系统键盘替换机制研究-探讨输入法App与键盘Extens.zip

iOS逆向工程_输入法开发_键盘扩展_第三方输入法App实现原理与逆向分析_基于Objective-C的输入法Demo开发与系统键盘替换机制研究_探讨输入法App与键盘Extens.zip上传一个【Java】VIP资源

SwiftUI UIInputViewController 基础教程

UIInputViewController 自定义键盘应用程序扩展的主视图控制器。 class UIInputViewController : UIViewController 使用教程 要创建自定义键盘,请首先对UIInputViewController类进行子类化,然后将键盘的用户界面添加到子类的inputView属性中。在Xcode中,您可以通过选择“自定义键盘”目标模板来启动自定义键盘。...

iCloudEnd的博客 1484

iOS自定义软键盘-UIInputView-UIKeyInput

iOS自定义软键盘-UIInputView-UIKeyInput,支持 字母、数组、符号,3种类型的键盘输入;

iOS开发-自定义键盘实现-基于UIKit框架的第三方输入法扩展-支持emoji表情和特殊符号输入的个性化键盘组件-通过继承UIInputViewController实现完整键盘功.zipai开发o自

iOS开发_自定义键盘实现_基于UIKit框架的第三方输入法扩展_支持emoji表情和特殊符号输入的个性化键盘组件_通过继承UIInputViewController实现完整键盘功.zipai开发o自上传一个【Typescript】VIP资源

ios 输入法扩展_iOS8新特性扩展(Extension)应用之四——自定义键盘控件

iOS8新特性扩展(Extension)应用之四——自定义键盘控件iOS8系统的开放第三方键盘,使得用户在输入法的选择上更加自主灵活,也更加贴近不同语言的输入风格。这篇博客,将介绍如何开发一个第三方的键盘控件。一、了解UIInputViewController类UIInputViewController是系统扩展支持键盘扩展的一个类,通过这个类,我们可以自定义一款我们自己的键盘提供给系统使用。首先...

weixin_39581739的博客 399

vscode+keil嵌入式软件开发全流程

vscode+keil嵌入式软件开发全流程

AspringQ的博客 6789

谈UITextView、UITextField的InPutView和AccessoryInputView的便利

无论是富媒体输入还是聊天表情输入,都经常切换系统键盘和自定义输入View。跟Android不一样的是,iOS需要在输入控件如UITextView聚焦才能出现键盘,默认情况下一旦输入控件失焦点有没有切换到其他输入控件的时候,键盘随之消失。尽管,可以通过text属性添加响应内容,但是没有光标的位置提示总是个缺陷。如腾讯的微信和手Q的iOS版都是没有很好处理光标问题,特别是微信iOS版的表情输入还是显示“

1372

AMD显卡跑Ollama大模型?手把手教你搞定Windows下GPU识别与加速(以RX 9600XT为例)

本文详细指导如何在Windows系统下使用AMD显卡(如RX 9600XT)运行Ollama大模型,解决GPU识别与加速问题。通过获取非官方Ollama版本、替换ROCm库文件等步骤,实现高效的GPU加速推理,提升大语言模型的运行效率。

weixin_28707365的博客 485

S32K144 ADC硬件触发实战:PDB与TRGMUX配置避坑指南

本文深入解析了S32K144微控制器中ADC硬件触发的两种核心方案:PDB与TRGMUX。通过对比其架构差异、详细配置流程及常见问题排查,提供了从寄存器操作到DMA联动的完整优化指南,旨在帮助开发者解决多通道采样时序不稳、CPU负载过高等实际难题,实现高效稳定的数据采集。

weixin_29168153的博客 444

iOS开发进阶(十一):ViewController 控制器详解

iOS 界面开发最重要的首属和View是View的控制器,也就是一般的页面,用来管理页面的生命周期(它相当于安卓里的Activity,两者很像,但又有一些差异)。的特点是它有好几种。一种最基本的。所谓容器,就是它们本身不能单独用来显示,必须在里面放一个或几个。用于导航栏管理页面;用于底部tab管理页面;用于切换器管理页面;容器还可以嵌套,比如把放进里面,这样在tab页面里,可以用启动导航栏样式的二级子页面。

IT全栈 华强工作室 3065

Neurocomputing 投稿指南

Generation Information:选择论文所属领域。上传附件(利益声明,手稿,摘要)审稿人偏好:可以选择期待的审稿人。

qq_41174671的博客 2万+

swift -> 键盘类(UIInputViewController) 初始键盘高度和 修改 高度

  初始化 高度  class KeyboardViewController: UIInputViewController { override func updateViewConstraints() { super.updateViewConstraints() print("view update view"); } ...

mft8899的博客 1377

python实现ECMS算法

ECMS(Equivalent Consumption Minimization Strategy)算法是一种用于混合动力汽车能量管理系统的优化策略。它通过计算等效油耗来平衡电池电量消耗和燃油消耗,从而优化整体能耗。以下是一个简单的Python实现,用于演示ECMS算法的基本思想。这个实现假设了一个简单的混合动力汽车模型,其中电池电量和燃油消耗是主要的优化目标。

weixin_45570158的博客 923

科研绘图(二):R 语言实现小鼠脑图谱 3D 渲染,附完整代码与数据获取指南

在生物医学科研中,脑区的 3D 可视化是呈现实验结果、解析脑结构功能的重要手段。R 语言凭借rgl和Rvcg等工具包,可高效实现小鼠全脑及特定脑区(如 CA1 区)的立体渲染,且代码可复用性强。本文将从环境搭建、数据准备、代码实现到结果导出,手把手带你完成小鼠脑图谱 3D 绘图,小白也能快速上手!

good_rrrrr的博客 2024

iOS开发小技巧--iOS键盘 inputView 和 inputAccessoryView

iOS键盘 inputView 和 inputAccessoryView 1.inputAccessoryView UITextFields和UITextViews有一个inputAccessoryView的属性,当你想在键盘上展示一个自定义的view时,你就可以设置该属性。你设置的view就会自动和键盘keyboard一起显示了。 需要注意的是,你所自定义的view既不应该处在其他的视图层里...

weixin_34318956的博客 363

【Windows Server 2019】组策略的配置与管理——理论基础

博文介绍了组策略的定义,作用和分类。组策略包括计算机配置和用户配置;组策略又分为为基于本地的组策略和基于AD(活动目录)的域组策略。并说明了不同组策略发生冲突时默认的规则。

VMware, Windows, Linux, Cisco, Container, Kubernetes, Kali 1万+

iOS 获取当前正在显示的ViewController

适用范围,在APPDelegate中需要获取当前显示的vc(比如来了新的推送), tabbar的子视图都是NavigationController,其它情况可以根据情况调整 + (UIViewController *)getCurrentVC{ UIWindow * window = [[UIApplication sharedApplication] keyWindo...

gcs的博客 1万+

【表面缺陷检测】基于yolov5的钢轨表面缺陷检测(附代码和数据集,Windows系统)

【表面缺陷检测】基于yolov5的钢轨表面缺陷检测(附代码和数据集,Windows系统)

学无止境、积少成多、厚积薄发 3986

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

iOS开发inputView和inputAccessoryView

在UITextField和UITextField中能查到这两个属性 @property (readwrite, retain) UIView *inputView; @property (readwrite, retain) UIView *inputAccessoryView; 在UITextField或者UITextField成为默认响应的时候,会弹出系统键盘。如果对这两个控件的inpu

MinggeQingchun的博客 5015

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

iOS 获取当前正在显示的视图控制器ViewController(最全)

目录 先插入以下介绍以下本编文章除标题所讲知识外,还额外包含的内容有如下: 1、获取当前显示的视图控制器ViewController 2、如何在多次presentViewController后直接返回到指定层 3、presentedViewController 与 presentingViewController 4、如何通过视图(view)获取该视图所在的控制器(viewController...

weixin_34314962的博客 1309

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

UIResponder inputView与inputAccessoryView

看完以后觉得使用还是很方便的. 同时代码中还有UITextField的leftView与rightView示例. 代码: // // main.m // ControlDemo // // Created by watsy0007 on 12-6-3. // Copyright (c) 2012年 __MyCompanyName__. All righ

watsy 5945

InputAccessoryView 与 inputView理解

inputView就是显示键盘的view,如果重写这个view则不再弹出键盘,而是弹出自己的view.如果想实现当某一控件变为第一响应者时不弹出键盘而是弹出我们自定义的界面,那么我们就可以通过修改这个inputView来实现,比如弹出一个日期拾取器。         inputView不会随着键盘出现而出现,设置了InputView只会当UITextField或者UITextView变为第一相应

菜鸟的专栏 930

UITextField的inputView和inputAccessoryView注意点

https://www.jianshu.com/p/5edc26812129 自定义键盘

georgehenrywilliam的博客 998

UITextField自定义inputView注意事项

自定义inputView的时候使用UIPickerView,自定义高度的时候会出现inputAccessoryView与inputView坐标错乱 如图:   解决方式:  UIView *inputView = [[UIView alloc]initWithFrame:self.pickerView.bounds];   [inputView addSubview:self.pic...

HuberCui的博客 3257
上一篇: iOS 音视频: 让 FFMpeg 支持对 H.264 的编码
下一篇: ReactNative: 记录几个常用
veryitman
博客等级 码龄16年 472粉丝 310原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值