问题标签 [uiview-hierarchy]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - 根视图控制器的视图不在窗口层次结构中
我编写了一个登录页面,在我的应用程序委托(在方法 application:didFinishLaunchingWithOptions:) 中设置为我的根视图控制器
其中 vc 是我的 HomeVC 的实例化。
此视图正确加载。我可以输入登录所需的所有数据,但只要我尝试加载另一个视图,我就会得到
我尝试了一些小技巧,以确保我使用以下代码获得了最顶层的视图控制器:
但是,正如我所怀疑的,它只返回了当前的视图控制器,它也是根视图控制器。它甚至从未进入 while 循环。
我无法理解我试图调用的视图控制器如何不在层次结构中,因为它不仅显示正确,而且还是层次结构上的唯一视图。
编辑 1:我将包括 AppDelegate 应用程序:didFinishLaunchingWithOptions: 方法的部分,我在其中创建和添加 VC 和 Navigation VC。
ios - 将一个视图直接放在另一个相同大小的视图之上
好的,首先我要实现的目标:
顶部带有交互式文本的背景视频。
此文本是在我编写的代码中生成的,并在 UIView 中呈现。视频正在 AVPlayerController 中播放,嵌入在 UIContainerView 中。
我最初的计划是将 UIView 的宽度、高度和顶部设置为等于 UIContainerView 的,但这似乎给我带来了一大堆“无法同时满足约束”错误。
我是否以正确的方式解决这个问题?有没有人尝试做类似的事情并成功了?
谢谢,乔
ios - 在 UIView 层次结构中选择自定义视图
有一种情况应该选择所有自定义视图(不是系统视图类型,如 UILabel 或 UIButton 等),如 XXButton 或 XXView。如何迭代 UIView 的子视图以找出所有自定义视图?也就是说,未知类自定义视图和苹果系统视图如何区分?
objective-c - 如何从自定义 UIButton 类显示视图控制器?
我有以下视图层次结构:导航控制器,在其中我推送了另一个视图控制器,其中包含 UITableView 和单元格中的自定义 UIButtons。我有另一个视图控制器(MyCustomViewController2),我想用动画显示所有这些东西。
但我对这种层次结构感到困惑,我不知道如何覆盖- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
自定义 UIButton 类中的方法。我到目前为止的代码是:
但这太糟糕了!而且我没有任何动画,我应该删除它以删除。接下来我可以尝试什么?
ios - 在应用程序进入前台时隐藏检查条件的按钮
我必须通过检查两个特定视图控制器的视图来隐藏一个按钮,该视图是当前视图的后代。这是在应用程序进入前台时完成的。代码:
问题是,尽管进入前台时呈现的视图是 hrViewController.view 或 reportViewController.view,但控件到达了 if 条件内部并且隐藏了我的按钮。为什么会这样?
ios - 视图卡在 MapView 后面
我已经尽一切努力让我的视图出现在地图视图上(见下面的代码),但它仍然不会出现。我不知道该怎么办。这是 0.5 alpha 的 mapView
当我使用 z 位置时,视图会出现,但它不允许任何触摸操作(它是自定义分段控件)。
ios - 如何获取层次结构中的哪个视图被触摸?
我有一个 MyUView 类型的 UIview V,其中包含一个名为 S1 的 stackView。S 堆栈包含一个名为 NM 的堆栈视图,其中包含一个名为 T 的 UITextField 和另一个名为 M 的堆栈视图,其包含一个名为 L 的 UILabel。为了简单起见,我使用字母来命名控件。
视图的层次结构如下:
- 五
- S1
- 纳米
- 吨
- 米
- 大号
- 纳米
- S1
为了识别长按手势,我在视图 V 中添加了一个名为 lprecognizer 的 LongPressGestureRecognizer。我想要在视图上检测 longPress 手势(以及可能的其他手势),但是,如果手势是 longpress 手势,我只想在 uitextfield T 是触摸视图时才执行特定操作。
我在 MyUView 中实现了以下委托方法:
这不起作用(即使我触摸了文本字段),因为识别为被触摸手势的视图是 Stack S1,它是视图 V 的子视图数组中的第一个也是唯一一个视图(请记住前面提到的层次结构)。
我的问题是:
如果有任何简单的方法可以知道某个感兴趣的视图(例如 UITextField)是否在 gicen 触摸区域中,即使这个感兴趣的视图在视图层次结构中很深?
我想避免递归搜索视图层次结构的想法。
ios - iOS 视图控制器是否有可能/预期寿命超过其视图?
在我正在开发的应用程序中,我们有时会在网络请求的完成部分遇到随机崩溃。
事件链如下:
- 添加一个视图控制器作为子 VC。父母注册为孩子的代表。
- 孩子调用委托方法来调用一些API。
- 父级在主队列上获取响应 JSON 数据。
- 父级根据接收到的数据更新子级中的视图作为完成。
然而,在最后一部分,崩溃是随机发生的。它很难重现,Crashlytics 显示崩溃的发生是由于引用了一个 nil 变量,即子视图控制器的视图层次结构中的一个子视图。此时父母还活着。
不是在调用子视图控制器的函数时崩溃,而是在引用函数内部的视图时崩溃,所以我唯一的猜测是视图在子视图控制器之前被释放。
所以我的问题是,正如标题所说,视图控制器是否有可能或预期会超过它的视图?
这是文件中所说的UIViewController
:
视图控制器是其视图及其创建的任何子视图的唯一所有者。它负责创建这些视图并在适当的时候放弃它们的所有权,例如当视图控制器本身被释放时。
我一直认为视图被释放是因为视图控制器的引用计数为 0。
更新而不是呈现,我将它添加为子视图控制器。添加了对所发生情况的更详细说明。