jjzjj

iOS:在 UI(子) View 中处理 UIGestureRecognisers

coder 2024-01-27 原文

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

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

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

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

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

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

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

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

谢谢你的想法...

最佳答案

如果您正在定义自定义 UIView 子类,您可以为它们添加尽可能多的逻辑,以便将其存储在本地,为它们提供委托(delegate)协议(protocol)以传递任何其他内容,并且只要您将委托(delegate)公开为IBOutlet,您可以将 View Controller 直接连接到 Interface Builder 或 Xcode 4 的 UI 设计器部分中作为相关委托(delegate)。我个人认为这将是最自然的前进方式,因为它直接在 View 中整合了任何特定于 View 的逻辑并允许您在通常进行接线的地方进行接线。

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

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

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

(2) 我不确定我是否完全理解该建议 — getViewController 定义在什么上以及它如何知道如何响应?如果是 UIViews 本身并且 View Controller 必须首先识别自己,那么我建议只采用批发委托(delegate)模式而不是专门用于 View 和 View Controller ,例如因为您可能希望构建将来自多个 subview 的逻辑联系在一起的复合 View 。

(3) 作为经验法则,传递给 init 的东西是类实际需要知道的,以便能够初始化;事后使用普通属性设置 Controller 可能会更好。或者将其设为 IBOutlet 并将其连接起来,以便它通过 NIB 自动发生。

关于iOS:在 UI(子) View 中处理 UIGestureRecognisers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6687232/

有关iOS:在 UI(子) View 中处理 UIGestureRecognisers的更多相关文章

  1. ruby - i18n Assets 管理/翻译 UI - 2

    我正在使用i18n从头开始​​构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在ruby​​onrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi

  2. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  3. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  4. ruby-on-rails - 渲染另一个 Controller 的 View - 2

    我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>

  5. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  6. ruby-on-rails - 如何在 Rails View 上显示错误消息? - 2

    我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c

  7. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  8. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

  9. ruby-on-rails - 如何在 Ruby on Rails 中实现由 JSF 2.0 (Primefaces) 驱动的 UI 魔法 - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。问题1)我想知道ruby​​onrails是否有功能类似于primefaces的gem。我问的原因是如果您使用primefaces(http://www.primefaces.org/showcase-labs/ui/home.jsf),开发人员无需担心javascript或jquery的东西。据我所知,JSF是一个规范,基于规范的各种可用实现,prim

  10. ruby-on-rails - 复数 for fields_for has_many 关联未显示在 View 中 - 2

    目前,Itembelongs_toCompany和has_manyItemVariants。我正在尝试使用嵌套的fields_for通过Item表单添加ItemVariant字段,但是使用:item_variants不显示该表单。只有当我使用单数时才会显示。我检查了我的关联,它们似乎是正确的,这可能与嵌套在公司下的项目有关,还是我遗漏了其他东西?提前致谢。注意:下面的代码片段中省略了不相关的代码。编辑:不知道这是否相关,但我正在使用CanCan进行身份验证。routes.rbresources:companiesdoresources:itemsenditem.rbclassItemi

随机推荐