iPhone: calling a parent/super method from a subview

Burf2000 picture Burf2000 · Sep 22, 2010 · Viewed 10.8k times · Source

hope someone can help me on this as been stuck for hours.

I am trying to make a kind of picture book. I have a view which is my container and I add subviews to that by using addsubview.

On the subview, I have swipe gestures etc that I want to trigger off method in the parent view. I worked out how to trigger the delegate but I cant get the delegate to trigger the parent view. I have read over 10 different ways of doing it and none work.

I now very confused about what a super view is to. Just to confuse matters, the delegate has a tabcontroller and the parent view is tab button 1

I tried

[self.view.superview method]
[self.superview method]

On the delegate I tried self.tabcontroller.parentviewcontroller, selectedview, super view.super

UPDATE : The subview needs to be independant of the parent view as its a reusable view. Also I have not set the parentview to superview as I just thought a superview is a view with subviews (please don't kill me). So maybe I just need to set the parentview to a superview?

Answer

VdesmedT picture VdesmedT · Sep 22, 2010

The proper way of doing such things is to use protocol and delegate pattern.

Define a protocol like

@protocol subViewDelegate
   -(void)somethingHappened:(id)sender;
@end

then implement that protocol in your superview :

@interface superView:UIViewController<subViewDelegate> {
...
}
...
@end

define a delegate property in your SubView like this

@interface subView : UIView {
   id<subViewDelegate> delegate;
   ...
}
@propery (nonatomic, assign) id<subViewDelegate> delegate;
...
@end

the in your subview, call the delegate like this

[self.delegate somethingHappened :self];