我创建了一个名为ImageShowcase
的UIView
,它有一个UIScrollView
,然后我添加了继承UIButton
类调用ImageShowcaseCell
。它工作正常。我感到困惑的一件事是在视图控制器中处理操作的最佳方法是什么,我目前已添加ImageShowCase
,当我可以在继承的类ImageShowcaseCell
中处理UIControlEventTouchUpInside
操作UIButton
但我想在View Controller
中处理它,以便我可以执行适当的操作。
实现这一目标的最佳方法是什么。
在自定义 ImageShowcaseCell 类中,可以将操作发送到响应程序链上,并允许视图控制器处理它:
[[UIApplication sharedApplication] sendAction:@selector(someMethodOnMyViewController:) to:nil from:self forEvent:nil];
或者,您也可以使用:
- 委托模式 - 将视图控制器设置为图像展示单元的委托。
- 在自定义类中创建基于块的方法,以便在触摸后执行块。
晚了,但为什么不使用响应链并在ImageShowCaseCell
按钮上添加操作呢?如果像这样添加:
[imageShowCaseCellInstance setTarget:nil action:@selector(methodYouWantCalledOnYourViewController) forControlEvents:UIControlEventTouchUpInside
只要您的imageShowCaseCellInstance
没有实现此方法,而您的视图控制器实现了,响应器链就应该将其传递给您的视图控制器(因为nil
是为target
指定的),只要ImageShowCaseCell
在视图控制器的层次结构中。
Edwin 的答案 (https://stackoverflow.com/a/13461504/482557) 有效,但通过在按钮上设置目标,您可以更明确。
使用 delegate 实现它。我的view controller
里已经有一位代表ImageShowCase
.所以我所做的我在ImageShowcase
中添加了另一个ImageShowcaseCell
.现在,我将UIControlEventTouchUpInside
事件从ImageShowcaseCell传递给ImageShowcase,ImageShowcase
将其传递给view Controller
。
ImageShowcaseCell (TouchUpInside) ----> ImageShowcase ----> ViewController
不能更干净。:)