希望有人可以帮我解决这个问题,因为他们被困了好几个小时。
我正在尝试制作一本图画书。 我有一个视图是我的容器,我通过使用addsubview添加子视图。
在子视图中,我有滑动手势等,我想在父视图中触发关闭方法。我找出了如何触发委托,但我不能让委托触发父视图。我已经阅读了10种不同的方法,但没有工作。
我现在对超级视图的含义感到非常困惑。只是为了混淆问题,委托有一个tabcontroller,父视图是tab按钮1
我试过
[self.view.superview method]
[self.superview method]
在代表上我试过了 self.tabcontroller.parentviewcontroller,selectedview,super view.super
更新: 子视图需要独立于父视图作为其可重用视图。 另外我没有将父视图设置为superview,因为我只是认为superview是一个带子视图的视图(请不要杀了我)。那么也许我只需要将父视图设置为superview?
答案 0 :(得分:23)
执行此类操作的正确方法是使用协议和委托模式。
定义类似
的协议@protocol subViewDelegate
-(void)somethingHappened:(id)sender;
@end
然后在你的superview中实现该协议:
@interface superView:UIViewController<subViewDelegate> {
...
}
...
@end
在SubView中定义一个委托属性,如此
@interface subView : UIView {
id<subViewDelegate> delegate;
...
}
@propery (nonatomic, assign) id<subViewDelegate> delegate;
...
@end
在子视图中,像这样调用代理
[self.delegate somethingHappened :self];
答案 1 :(得分:3)
在没有给出任何代码的情况下帮助你有点困难,但让我们试试:
答案 2 :(得分:0)
对于自定义视图,您可以继承UIControl并使用控制事件:
UIControlEventApplicationReserved = 0x0F000000
)[self sendActionsForControlEvents:events]
或者,您可以使用UIGestureRecognizer样式的界面(addTarget:action :)。
或者只使用UIGestureRecognizer(OS 3.2 +)
答案 3 :(得分:-1)
在添加子视图时,您的父视图是否将自己设置为子视图的超级视图?否则,子视图不知道其超级视图是谁。
命名事物的更标准方法是调用方法处理程序代理而不是superview,使其成为属性,并使子视图检查是否存在要设置的委托以及是否可以处理该方法。 / p>
答案 4 :(得分:-1)
这是一个如何在iPhone上应用委托模式的一个很好的例子。我下载了代码,它运行得很好。