在IOS中将动作传递给一个uiview到另一个

Posted

技术标签:

【中文标题】在IOS中将动作传递给一个uiview到另一个【英文标题】:Passing action to one uiview to another in IOS 【发布时间】:2012-11-19 19:53:09 【问题描述】:

我创建了一个名为ImageShowcaseUIView,它有一个UIScrollView,然后我添加了UIButton 继承的类调用ImageShowcaseCell。它工作正常。我感到困惑的一件事是在视图控制器中处理动作的最佳方法是什么,我已经添加了ImageShowCase,目前我可以在UIButton 继承类ImageShowcaseCell 中处理UIControlEventTouchUpInside 动作,但我想处理它在View Controller 中,以便我可以执行适当的操作。

实现这一目标的最佳方法是什么。

【问题讨论】:

【参考方案1】:

在您的自定义 ImageShowcaseCell 类中,您可以将动作发送到响应者链并允许视图控制器处理它:

[[UIApplication sharedApplication] sendAction:@selector(someMethodOnMyViewController:) to:nil from:self forEvent:nil];

或者你也可以使用:

    委托模式 - 将您的视图控制器设置为 ImageShowcaseCell 的委托。 在您的自定义类中创建一个基于块的方法,以便在触摸后执行该块。

【讨论】:

接受了委托选项。谢谢【参考方案2】:

有点晚了,但为什么不使用响应链并在您的ImageShowCaseCell 按钮上添加操作?如果你像这样添加它:

[imageShowCaseCellInstance setTarget:nil action:@selector(methodYouWantCalledOnYourViewController) forControlEvents:UIControlEventTouchUpInside

只要你的imageShowCaseCellInstance 没有实现这个方法而你的视图控制器实现了,响应者链应该把它向上传递(因为nil 是为target 指定的)到你的视图控制器,只要@ 987654327@ 在您的视图控制器的层次结构中。

Edwin 的回答 (https://***.com/a/13461504/482557) 有效,但通过在按钮上设置目标可以更明确。

【讨论】:

【参考方案3】:

通过使用委托来实现它。我的view controller 中已经有一位代表ImageShowCase。所以我做了什么,我在ImageShowcase 中为ImageShowcaseCell 添加了另一个。现在我将 UIControlEventTouchUpInside 事件从 ImageShowcaseCell 传递给 ImageShowcase,并将 ImageShowcase 传递给 view Controller

ImageShowcaseCell (TouchUpInside) ----> ImageShowcase ----> ViewController

再干净不过了。 :)

【讨论】:

以上是关于在IOS中将动作传递给一个uiview到另一个的主要内容,如果未能解决你的问题,请参考以下文章

使用委托从iOS中的ViewModel传递数据到UI的任何替代方法?

将 UIGestureRecognizer 的所有事件从一个 UIView 传递到另一个 UIView(子视图)[重复]

在 UIView 中将属性传递给 drawRect 时遇到问题

如何在 iOS 中将一个视频叠加到另一个视频上?

在Android中将一个对象从一个活动传递到另一个活动

在 ASP.net MVC 4 中将类对象从一个控制器动作传递到不同的控制器动作