iOS:在 UI(Sub)Views 中处理 UIGestureRecognisers

2024-04-26

我想知道如何最好地解决以下问题:

我有一个 ViewController。它的视图包含大量复杂的子视图(UIView的子类)。由于复杂性,其中一些 UIView 初始化自己的 UIGestureRecognisers 并实现相应的目标操作。因为我想协调各个子视图的手势,所以我必须将单个 ViewController 设置为手势的委托。 这有多种可能性。

1)初始化viewController中的所有手势(这将导致一个巨大的viewController)

2)在UIVIews中定义一个协议(getViewController),由ViewController实现

@protocol CustomViewDelegate <NSObject>
@required
- (UIViewController *)getViewController;
@end

3)自定义UIViews的init方法并使用ViewController作为选项。

- (id)initWithFrame:(CGRect)frame andViewController:(UIViewController *)vc;

解决这个问题最优雅的可能性是什么?可以在 UIView 对象内实现目标操作吗?

谢谢你的想法...


如果您正在定义自定义 UIView 子类,您可以为它们投入尽可能多的逻辑,以存储本地数据,为它们提供委托协议来传递其他任何内容,并且只要您将委托公开为 IBOutlet,您就可以可以直接在 Interface Builder 或 Xcode 4 的 UI 设计器部分中将视图控制器连接为相关委托。我个人认为这将是最自然的方法,因为它直接在视图中整合任何特定于视图的逻辑,并让您可以在通常接线的地方进行接线。

就整体设计而言,只要您的视图仅执行与视图相关的逻辑,这种方案就符合模型-视图-控制器。因此,例如,如果您有一个自定义矩形视图,可以在其上的任何位置滑动以重新定位图钉,并且图钉的 2d 位置会影响某些其他系统设置,那么您在视图中捕获手势是正确的,重新定位引脚,然后将其位置的更新发送给委托,这将履行控制器的角色,并将值推送到受影响的任何其他视图并推送到模型。

直接评论您建议的解决方案:

(1) 这会将所有逻辑集中到一个控制器中;从设计的角度来看它是否正确取决于您必须询问自定义视图的程度(因为您不希望最终将它们视为外部参与者必须知道如何处理的主要数据)操作)以及您想要重用逻辑的程度。

(2) 我不确定我完全理解这个建议—— getViewController 定义在什么上以及它如何知道如何响应?如果是 UIView 本身,并且视图控制器必须首先识别自己,那么我建议只采用批量委托模式,而不是专门针对视图和视图控制器,例如因为您可能想要构建将多个子视图的逻辑结合在一起的复合视图。

(3) 根据经验,传递给 init 的内容是类实际上需要知道才能初始化的内容;事后使用普通属性来设置控制器可能会更好。或者将其设置为 IBOutlet 并将其连接起来,以便通过 NIB 自动发生。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS:在 UI(Sub)Views 中处理 UIGestureRecognisers 的相关文章

  • 在 Xcode 5 中重命名 iOS 项目[重复]

    这个问题在这里已经有答案了 我需要重命名一个 iOS 项目 有没有办法在不开始一个全新项目的情况下做到这一点 我发现的所有其他信息都与 Xcode 4 或旧版本相关 这些方法似乎使项目崩溃 我在尝试任何名称更改之前创建了一个快照 在 Xco
  • 如何使用AudioKit保存音频文件?

    我有音频文件 我给它做了一些效果 let pitchshifter AKPitchShifter self audioPlayer pitchshifter shift 10 AudioKit output pitchshifter 如果我
  • 如何接收有关与我共享的记录中所做更改的 CloudKit 通知?

    我有两个 iCloud 帐户 A and B 在两个不同的设备上 来自其中之一 A 我将 ckrecord 分享给另一个人 B 像这样 let controller UICloudSharingController controller p
  • 适用于 iPhone / iPad / iOS 的快速、精益 PDF 查看器 - 提示和提示?

    最近有很多关于绘制 PDF 的问题 是的 您可以使用UIWebView但这无法提供您所期望的优秀 PDF 查看器的性能和功能 您可以绘制PDF页面到 CALayer http www cocoabuilder com archive coc
  • UIButton的高亮状态由什么控制事件开始和结束

    我正在创建类似钢琴的视图UIButton作为钢琴键 什么UIControlEvents当按钮获得和失去突出显示状态时 我应该监听以获得回调吗 我试图创建子类UIButton并添加属性观察者highlighted并且运行良好 然而 有时我需要
  • 根据 iOS 版本使用不同的类实现?

    iOS 11 最近添加了一个我想使用的新功能 但我仍然需要支持旧版本的 iOS 有没有一种方法可以将同一个类编写两次 并让较新版本的 iOS 使用该类的一个版本 而旧版本的 iOS 使用另一个版本 注 最初我用的是if available
  • 水平 UICollectionView 单行布局

    我正在尝试使用以下命令设置简单的水平布局UICollectionView 兜圈子却没有达到预期的结果 所以任何指针或例子将不胜感激 我粘贴经常更改的代码但没有成功可能没什么意义 该图像显示两行 第一行是单个项目 尺寸正确并且在中心正确对齐
  • 无法在 ios 应用程序中通过 googlecast 正确投射视频

    我正在开发一个基于 AVPlayer 的自定义视频播放器项目 尝试整合谷歌演员 我已经根据谷歌图进行了集成 https codelabs developers google com codelabs cast videos ios http
  • 如何使用 CNContacts 快速获取手机号码?

    我有一些代码可以检索用户联系人中的所有电话号码 但只想过滤掉手机号码 目前 我只是通过将第一个数字为 或第二个数字为 7 的数字添加到数组中来实现此目的 如下所示 func findContacts gt CNContact let key
  • SwiftUI 意外地自动弹出 NavigationLink

    我有一个简单的用例 其中一个屏幕使用 NavigationLink 推送另一个屏幕 iOS 14 5 有一个奇怪的行为 即推送的屏幕在被推送后立即弹出 Code NavigationLink destination EmptyView Em
  • Xamarin - 错误:dsymutil 退出,代码为 72

    最近升级到 VS for Mac 8 10 21 在构建应用程序时 我得到 Xamarin Shared targets 3 3 Error dsymutil exited with code 72 这是 Xcode 13 3 的情况 完整
  • 使用数组中的字符串淡入/淡出标签

    func setOverlayTitle self overlayLogo text Welcome var hello String Bon Jour GUTEN nMORGEN BONJOUR HOLA BUENOS D AS BUON
  • 将类型传递给通用 Swift 扩展,或者理想情况下推断它

    说你有 class Fancy UIView 你想找到所有兄弟姐妹Fancy意见 没问题 https stackoverflow com q 37232743 294884 for v UIView in superview subview
  • Swift:长按手势识别器 - 检测轻击和长按

    我想连接一个动作 如果手势是点击 它会以特定的方式为对象设置动画 但如果按下持续时间超过 0 5 秒 它会执行其他操作 现在 我刚刚连接了动画 我不知道如何区分长按和点击 如何访问新闻持续时间以实现上述目的 IBAction func ta
  • 如何删除 UITableView 中的缩进?

    首先 我对此很陌生 我很可能忘记了一些非常简单的事情 问题 我正在制作一个应用程序 在 a 中显示来自 imgur com 的随机图像tableView 由于某种原因 所有单元格都会缩进少量 如下图所示 我摆弄了许多设置storyboard
  • CATextLayer 上 iOS 6 中不需要的垂直填充

    背景 我在 iOS 5 中开始了我的项目 并构建了一个带有图层的漂亮按钮 我在按钮上添加了一个 textLayer 并使用以下代码将其居中 float textLayerVerticlePadding self bounds size he
  • UICollectionView setLayout:animated: 不保留 zIndex

    我注意到打电话时setLayout animated in a UICollectionView要在两个布局之间切换 当前可见的单元格不遵循zIndex它的布局属性已设置在layoutAttributesForItemAtIndexPath
  • 有没有办法在 onclick 触发时禁用 iPad/iPhone 上的闪烁/闪烁?

    所以我有一个有 onclick 事件的区域 在常规浏览器上单击时 它不会显示任何视觉变化 但在 iPad iPhone 上单击时 它会闪烁 闪烁 有什么办法可以阻止它在 iPad iPhone 上执行此操作吗 这是一个与我正在做的类似的示例
  • 诊断和仪器均缺少“僵尸”选项

    运行 Xcode 4 0 2 Zombie 选项丢失 其他 SO 帖子建议找到它的两个地方 Product gt Run looks like this Product gt Profile looks like this 奇怪的是 我之前
  • Unwind segue 的用途是什么以及如何使用它们?

    iOS 6 和 Xcode 4 5 有一个称为 Unwind Segue 的新功能 展开转场可以允许过渡到故事板中场景的现有实例 除了 Xcode 4 5 发行说明中的 这个简短条目之外 UIViewController 现在似乎还有几个新

随机推荐

  • 可以在 swift 中创建静态分配的数组吗?

    我想在 swift 中创建一个结构体 它有少量固定数量的值 比如 16 个浮点数 作为实例数据 要求该结构体不将这些值存储在堆上 以便结构体实例的地址就是实例变量的地址 还要求这些值可以通过下标在结构内部访问 就像数组一样 在 C 语言中
  • 验证 Rails 中多个属性之一是否存在

    在多语言应用程序中 用户可以输入自己的中文和英文姓名 用户可以输入其中之一或两者 但必须至少输入一个名称 class Person lt ActiveRecord Base validates zh name presence gt tru
  • 使用 ManagementObjectSearcher 时检测到 DisconnectedContext

    我在 WndProc 覆盖中使用以下函数 Public Function GetPortName As String Dim portNameData As String Dim comPortNumber As String Try Di
  • 如何在dynamo db中定义“Map”AttributeType?

    我是新来的AWS Dynamodb I 已读过 https docs aws amazon com amazondynamodb latest APIReference API AttributeValue html我们可以设置Mdynam
  • Twisted可以用Java实现吗?

    我记得读到过以下特性导致了 Python 中有趣的框架 库的开发 我读过这篇文章http www python org workshops 2002 02 papers 09 index htm http www python org wo
  • 如何在 wix .wxs 文件中指定

    我想在 Wix 安装程序的 wix wxs 文件中将属性指定为受限属性
  • 如何在 std::shared_ptr 之间设置/获取 unsigned char *?

    我想设置unsigned char 数据到std shared ptr
  • 如何在 C# 中从 USB 令牌读取证书

    我有一个 USB 令牌 其中包含一个加密证书 该证书具有公钥和私钥 现在我想用 C 创建一个应用程序 通过它我可以找到可访问的证书信息 当我插入 USB 令牌时 它会被检测到 但计算机部分上没有显示任何驱动器 就像闪存驱动器一样 如何从 U
  • Tensorflow 何时更新权重和偏差?

    张量流什么时候更新for循环中的权重和偏差 下面是tf的github上的代码 mnist softmax py https github com tensorflow tensorflow blob master tensorflow ex
  • 如何通过 Azure Active Directory 对多租户 ASP.NET 应用程序进行身份验证?

    我一直在我的数据中心使用 Azure Active Directory 试用许可证进行一些测试 我们公司拥有自己的托管服务和物理硬件 目前我们希望保持这种状态 尽管我们将来可能会研究将其全部转移到云服务 目前 我们正在尝试为使用 Azure
  • 在 Android 中“注入所有内容”是一种不好的做法吗?

    在研究依赖注入时 我发现了一些建议的方法注入一切 http frogermcs github io inject everything viewholder and dagger 2 example 和其他人说没有必要这样做 https s
  • .clone() 和 .html() 有什么区别?

    Jquery 的 clone 和 html 函数有什么区别 Jquery 文档指出 clone 方法对匹配的集合执行深度复制 元素 这意味着它复制匹配的元素以及所有 它们的后代元素和文本节点 在 HTML 文档中 html 可用于获取任意内
  • self.__class__ 的快捷方式

    有时我发现自己正在接触班级成员 在一个项目中 我什至在类定义中包含了类定义 在这种情况下我经常发现mysql输入self class
  • 具有稀疏矩阵的 numpy 元素外积

    我想在 python 中对三个 或四个 大型二维数组进行逐元素外积 值是 float32 四舍五入到小数点后两位 它们都具有相同的行数 n 但具有不同的列数 i j k 所得数组的形状应为 n i j k 然后 我想对结果的每一列求和 最终
  • 阻止请求 URL selenium Firefox Python

    我试图在访问网站时阻止某些 URL 这意味着我只提出继续所需的请求 有一个 url 自动加载 5 MB 代码我无法阻止通过 Firefox 配置文件禁用 css 我读到硒不允许那么多的控制 但我不确定是否有某种方法可以使用插件来设置它 但是
  • 有没有办法像 Visual Studio 一样让 Xcode 5 自动完成?

    Xcode 5 现在取代了 Xcode 4 我对这两种 IDE 的一个常见抱怨是它们不能非常积极地自动完成 在 Visual Studio 中 只要您按下非标识符键 如括号 逗号 点 空格等 就会提交自动补全 在 Xcode 5 上 您必须
  • 我应该如何使用 Mojo::UserAgent 处理 HTML META 标记?

    我必须处理一些配置错误的 Web 服务器 因此我开始处理 HTML 元标记以将信息反馈到 Web 用户代理对象中 我尝试了多种方法来做到这一点莫乔利西斯 http mojolicio us并决定在响应中寻找 完成 事件 我的目标是让其余代码
  • 我如何从另一个功能模块访问活动

    我正在创建一个即时应用程序 其中包括应用程序模块 基本功能模块 即时应用程序模块和另一个功能模块 问题是我无法从基本功能和功能模块访问应用程序模块的活动 并且基本功能模块和功能模块之间也是如此 但我能够从应用程序模块访问基本功能模块的活动
  • 如何使用其他语言的语音识别 android

    我有一个曾经有效的代码 但由于某种原因它突然停止工作 我正在尝试使用希伯来语语音识别 但似乎从几天前开始它才开始英语语音识别 这是我的代码 sr SpeechRecognizer createSpeechRecognizer getAppl
  • iOS:在 UI(Sub)Views 中处理 UIGestureRecognisers

    我想知道如何最好地解决以下问题 我有一个 ViewController 它的视图包含大量复杂的子视图 UIView的子类 由于复杂性 其中一些 UIView 初始化自己的 UIGestureRecognisers 并实现相应的目标操作 因为