【问题标题】:Connect action of a XIB loaded from a custom class to a storyboard将从自定义类加载的 XIB 的操作连接到情节提要
【发布时间】:2012-06-22 19:43:12
【问题描述】:

我正在尝试创建一个可重复使用的组件来显示一些照片集。 基本流程如下:

  • 第一个视图:View。它包含我所谓的库,以编程方式设计并通过分配自定义类从情节提要中加载
  • 我在模态视图中拍照,从“拍照”按钮打开结束
  • 照片保存到磁盘后,我要求PhotoLib 从照片路径中创建一个新的PhotoCell

我希望我的PhotoCell 启用触摸功能,因此当我点击它时,它会以模态方式打开第二个视图,但从我读到的内容来看,我无法从我的PhotoCell 或内部的 UIImageView 执行此操作(不是控制器)。

那我该怎么办? View 嵌入在 NavigationController 中,即使下面的屏幕截图中没有显示。

谢谢!

【问题讨论】:

  • 你不能在图像视图上方添加一个样式为“自定义”的按钮并使用它吗?如果我理解你的想法,我做了类似的事情。也许你应该展示你的故事板和部分代码来澄清。
  • 我可以,但我仍然不知道如何将它的 IBAction 连接到我的代码。如果可以总结的话,我会尝试发布更多信息
  • 是的,我重新阅读了您的问题。也许您需要具有方法 -(void)didTapPhotoCell:(Photocell*)self 或类似方法的 Photocell 类中的协议,将您的视图实现为委托并从那时起采取行动?
  • 是的!这很有效。因为我正在从PhotoLib 创建我的PhotoCell 元素,并且想将View 分配为PhotoCell.delegate,所以我尝试做这样的事情(来自PhotoLib):c.delegate = self.superview 甚至c.delegate = self.superview.superview(其中 c 是我的光电管)但它不起作用。为什么?

标签: iphone xcode uibutton xib ibaction


【解决方案1】:

如果您在 photolib 中创建 Photocell,则 photolib 应该从 photocell 实现委托方法。但是 photolib 本身不是 rootviewcontroller,所以它应该自己声明委托方法,并且包含的​​视图应该实现它。

基本上你将 Photocell 从自身传递给 Photolib(它实现了委托方法

-(void) openPhotoCell:(Photocell*)cell
{
  [self.delegate openPhotocell:(Photocell*)cell];
}

,然后将其传递给 View,后者又将其打开。

这看起来像是从耳朵里拔了一颗牙,但实际上它非常有效,如果你编写了很好的不言自明的代码,这不是问题。我目前正在做一个有几十个视图和控制器的大项目,它工作得很好,没有人对此有任何问题。

如果你有更多的层,那么也许你应该看看 NSNotification。

希望它有所帮助,我很乐意解释更多。

更新:

链接:

about delegates in cocoa fundamentals guide

delegation pattern in wikipedia

【讨论】:

  • 它运行良好,但我决定在 PhotoLib 中创建一个属性 delegate,并且每次创建 PhotoCell 时,我都会从中设置它的委托。我认为这会更...明显,因为照片库本身不需要委托,但也许如果我需要创建一个功能齐全且易于使用的库,那么我必须做得更好
  • @dvkch 别担心,你所做的很正常。是的,将来您可能想要重新实现它。但是,如果您的项目不会变得更复杂,您不必这样做。
  • 好吧!谢谢 !我想将您的帖子设置为已接受的答案,但是您能否添加一个链接,以便为未来的读者快速解释其中的代表?``
  • @dvkch 添加了链接。我猜你的意思是那些链接。
猜你喜欢
  • 2015-11-14
  • 1970-01-01
  • 2015-12-31
  • 2018-04-24
  • 2013-05-18
  • 1970-01-01
  • 2015-09-18
  • 2017-11-05
  • 1970-01-01
相关资源
最近更新 更多