如何检测给定类大小的 UIView 是不是存在?

Posted

技术标签:

【中文标题】如何检测给定类大小的 UIView 是不是存在?【英文标题】:How do I detect if a UIView is present or not for a given class size?如何检测给定类大小的 UIView 是否存在? 【发布时间】:2015-01-15 20:26:00 【问题描述】:

我想构建一个与SplitViewController 类似但不使用SplitViewController 的应用程序。当应用程序在 iPad 上运行时,两个视图同时出现。大师与细节。 当应用程序在 iPhone 上运行时,只会显示主视图,当用户点击项目时,将显示详细视图。

我查看了 xcode 提供的 Master Detail 示例项目。此示例项目使用多个故事板。 1 个用于 iPad,另一个用于 iPhone。我使用单个故事板。

我可以用什么来实现这种类型的 UI?

到目前为止,我能够设置类大小,以便在以常规 x 常规运行时,显示两个容器视图,左侧的容器视图加载主视图控制器,右侧的容器视图加载详细视图控制器。

当手机在 iPhone 上运行时,它只加载主视图控制器,当我点击主视图控制器上的某个项目时,它会进入详细视图控制器。

现在的问题是,在 iPad 上,如果我点击主视图控制器中的项目,而不是在右侧的详细视图控制器中加载数据,它会打开一个新的视图控制器并完全覆盖主视图控制器.

我并不期待这个问题的完整解决方案。只是一个指导。

谢谢。

【问题讨论】:

为每种 UI 样式使用故事板。毕竟,他们使用多个故事板是有原因的...... 大小类。是否引入了 Size 类以便我们不使用多个故事板?同样在 xcode 6 中,当您为设备选择“通用”时,您无法再像在 xcode 5 中那样选择故事板文件。 【参考方案1】:

我正在制作一个类似结构的应用程序。我正在以编程方式处理我所有的 segue 和 ViewController 更改。要检查您使用的是哪种类型的设备,要知道要进行哪种类型的更改,请运行以下代码:

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)  //iPad Implementation
    <#statements#>

else   //iPhone Implementation
    <#statements#>

我经常使用它,我实际上将它添加到我的代码 sn-p 库中。

【讨论】:

谢谢。我会测试一下。如果你不介意我问,这是正确的做法吗? 当我第一次学习编写通用应用程序时,我就是这样被教导的。我能想到的唯一方法是使用多个故事板,例如提到的@Ian MacDonald,并通过 IB 进行转换。我觉得我在代码中拥有更多控制权,所以我建议使用 if 语句。但是,如果您需要为每个版本做不同的事情,这可以添加很多代码,我的应用程序就是这样做的。几乎每个函数都包含这些语句之一。 是的。我可以看到我的应用程序有很多这样的 if else 语句。老实说,我不喜欢这种依赖。我也不想为 ipad 和 iphone 重复代码。拥有多个故事板仍然意味着我将拥有多个代码。唯一的区别是,代码将被分成 2 个 viewController 文件而不是一个。 我实现这个的方式是,我有 3 个视图控制器。一个是底座,用来支撑另外两个。在 iPad 中,我将两个视图控制器一起加载,在 iPhone 上,我加载一个并使用您的代码,我计划继续使用第三个控制器,或者使用通知来更新第三个控制器。第二和第三视图控制器不直接相互通信。第二个和第三个视图控制器委托给主视图控制器,它告诉第二个和第三个视图控制器做什么。这看起来像一个好的实现吗? 听起来和我正在做的类似。很多 nsnotifications 来更新东西。

以上是关于如何检测给定类大小的 UIView 是不是存在?的主要内容,如果未能解决你的问题,请参考以下文章

检查 UIView 当前是不是正在制作动画

如何检查 UIView 是不是仍然存在?

如何检测 UIView 上的触摸并检测单击哪个 UIView 类似于 UIButton 上的触摸?

避免 UIView 创建非常大的绘图画布

将对象检测模型嵌入 iOS 应用程序,并将其部署在 UIView 的内容而不是相机流上?

如何检测类的属性何时更改