- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个简单的 View 层次结构示例。
显然,主视图空间是用户将与之交互的主要空间。在底部,我有一些选项卡可以弹出,以向用户指示他/她在应用程序进程中的位置。通常,这些选项卡只占用底部“自定义选项卡”矩形指示的空间,但它们可以一直向上扩展以填充“空白空间”框。
为了使选项卡仍可点击,我必须将选项卡 View 的框架设为包含“自定义选项卡”空间和“空白空间”空间的完整矩形。这导致的是,当标签未弹出时,“空空间”没有与用户交互,因为该输入基本上是被Uiview所消耗的,而不是通过层次结构的其余部分转发。
我想这个问题的根源是“主视图空间”和“空白空间+自定义选项卡”都是主窗口的 subview 。
如果用户没有主动点击交互元素,有没有办法告诉系统将用户输入转发到同级 View ?例如,使用 touchesBegan
、touchesEnded
等方法向操作系统指示此 View 未使用输入。
编辑
这是 View 的另一个版本,展示了打开一个选项卡的状态:
EDIT2
经过一些简单的测试,默认行为似乎是最顶层的 View 首先获得输入。即使您在 UITextField
之上有一个清晰的 UIView
也是如此。清晰的 UIView
将消耗输入,阻止 UITextField
可编辑
EDIT3
标签的工作方式应该是用户可以点击标签(大小如第一张图片所示),然后它会展开以显示与该标签关联的缩略图 View (如第二张图片所示)。然后,用户可以选择再次点击该选项卡将其关闭,并将尺寸恢复为原始图片。为了使选项卡在打开时可以点击,我必须让包含 View 基本上足够大以包含所有 4 个选项卡,就好像它们是打开的一样。这会导致包含 View 中出现大量空白空间。这个空白空间导致屏幕上基本上是无效的输入空间。如果主视图空间中有一个按钮被空白区域覆盖,用户将无法单击它。我希望能够避免这种行为,并让那个被空白区域覆盖的按钮仍然可以点击。
最佳答案
与其尝试“转发”触摸,不如修改您的布局,使选项卡 View 仅与选项卡一样大,并将其 .frame
更改为仅代码中的较大矩形当你需要的时候。例如,单击选项卡时:
CGRect tabFrame = tabView.bounds;
tabFrame.origin.y = top_of_emptySpace;
tabFrame.size.height = height_of_emptySpace + height_of_tabView;
tabView.frame = tabFrame;
然后你就可以添加你需要的内容了。当您需要它消失时,删除内容然后执行:
CGRect tabFrame = tabView.bounds;
tabFrame.origin.y = top_of_tabView;
tabFrame.size.height = height_of_tabView;
tabView.frame = tabFrame;
There might be some tweaking required to make the content show up as you like, but this way, when the tabs are minimized, you won't have to do anything extra to make the main view respond to touches correctly.
关于objective-c - 如何防止 UIView 消耗用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11524440/
我遵循了一本名为“Sitepoint Full Stack Javascript with MEAN”的书中的教程,我刚刚完成了第 6 章,应该已经创建了一个带有“数据库”的“服务器”。数据库只不过是
在 Jquery 中,我创建两个数组,一个嵌入另一个数组,就像这样...... arrayOne = [{name:'a',value:1}, {name:'b',value:2}] var arra
这个问题在这里已经有了答案: What is the explanation for these bizarre JavaScript behaviours mentioned in the 'Wa
我被放在别人的代码上,有一个类用作其他组件的基础。当我尝试 ng serve --aot(或 build --prod)时,我得到以下信息。 @Component({ ...,
我正在测试一些代码,并使用数据创建了一个 json 文件。 问题是我在警报中收到“[object Object],[object Object]”。没有数据。 我做错了什么? 这是代码:
我想打印 [object Object],[object Object] 以明智地 "[[{ 'x': '1', 'y': '0' }, { 'x': '2', 'y': '1' }]]"; 在 ja
我有一个功能 View ,我正在尝试以特殊格式的方式输出。但我无法让列表功能正常工作。 我得到的唯一返回是[object Object][object Object] [object Object]
在使用优秀的 Sim.js 和 Three.js 库处理 WebGL 项目时,我偶然发现了下一个问题: 一路走来,它使用了 THREE.Ray 的下一个构造函数: var ray = new THRE
我正在使用 Material UI 进行多重选择。这是我的代码。 {listStates.map(col => (
我的代码使用ajax: $("#keyword").keyup(function() { var keyword = $("#keyword").val(); if (keyword.
我遇到了下一个错误,无法理解如何解决它。 Can't resolve all parameters for AuthenticationService: ([object Object], ?, [o
我正在尝试创建一个显示动态复选框的表单,至少应选中其中一个才能继续。我还需要获取一组选中的复选框。 这是组件的代码: import { Component, OnInit } from '@angul
我正在开发 NodeJs 应用程序,它是博客应用程序。我使用了快速验证器,我尝试在 UI 端使用快速闪存消息将帖子保存在数据库中之前使用闪存消息验证数据,我成功地将数据保存在数据库中,但在提交表单后消
我知道有些人问了同样的问题并得到了解答。我已经查看了所有这些,但仍然无法解决我的问题。我有一个 jquery snipet,它将值发送到处理程序,处理程序处理来自 JS 的值并将数据作为 JSON 数
我继承了一个非常草率的项目,我的任务是解释为什么它不好。我注意到他们在整个代码中都进行了这样的比较 (IQueryable).FirstOrDefault(x => x.Facility == fac
我只是在删除数组中的对象时偶然发现了这一点。 代码如下: friends = []; friends.push( { a: 'Nexus', b: 'Muffi
这两个代码片段有什么区别: object = nil; [object release] 对比 [object release]; object = nil; 哪个是最佳实践? 最佳答案 object
我应该为其他人将从中继承的第一个父对象传递哪个参数,哪个参数更有效 Object.create(Object.prototype) Object.create(Object) Object.creat
我在不同的对象上安排不同的选择器 [self performSelector:@selector(doSmth) withObject:objectA afterDelay:1]; [self per
NSLog(@"%p", &object); 和 NSLog(@"%p", object); 有什么区别? 两者似乎都打印出一个内存地址,但我不确定哪个是对象的实际内存地址。 最佳答案 这就是我喜欢的
我是一名优秀的程序员,十分优秀!