I dont exactly know the most efficient way to do it(as i am also now to this language),but it is for sure that i have solved ur problem. I made a simple program for that.Three classes involved here in my eg are BaseViewController (which will show two views),LabelView and PickerView (according to ur requirement).
In LabelView.h
@protocol LabelViewDelegate -(void)didTapTwiceLabelView; @end @interface LabelView : UIView { id <LabelViewDelegate> delegate; } @property(nonatomic,retain)id <LabelViewDelegate> delegate; -(void)didTouch; @end
In LabelView.m
@synthesize delegate; -(id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { UILabel* labl = [[UILabel alloc] initWithFrame:CGRectMake(10, 5, frame.size.width-20,20)]; labl.text = @"Some Text"; [self addSubview:labl]; [labl release]; labl = nil; self.backgroundColor = [UIColor grayColor]; UITapGestureRecognizer* ges = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTouch)] autorelease]; ges.numberOfTapsRequired = 2; [self addGestureRecognizer:ges]; } return self; } -(void)didTouch { [delegate didTapTwiceLabelView]; }
//=============================================================
In Pickerview.h
@protocol PickerViewDelegate -(void)didTapBackButton; @end @interface PickerView : UIView <UIPickerViewDelegate,UIPickerViewDataSource>{ id <PickerViewDelegate> delegate; } @property(nonatomic,retain)id <PickerViewDelegate> delegate; @end
In Pickerview.m
@implementation PickerView @synthesize delegate; -(id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { UIPickerView* picker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 30, 320, 216)]; picker.delegate = self; picker.dataSource = self; [self addSubview:picker]; [picker release]; picker = nil; self.frame = CGRectMake(frame.origin.x, frame.origin.y, 320, 250); UIButton* btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; [btn setFrame:CGRectMake(10, 1, 50, 27)]; [btn setTitle:@"Back" forState:UIControlStateNormal]; [btn addTarget:self action:@selector(backButton) forControlEvents:UIControlEventTouchUpInside]; [self addSubview:btn]; } return self; } -(void)backButton { [delegate didTapBackButton]; }
//====================================================================
in BaseViewController.h
#import "LabelView.h" #import "PickerView.h" @interface VarticalLabel : UIViewController<UITextFieldDelegate,PickerViewDelegate,LabelViewDelegate> { PickerView* myPickerView; LabelView* myLabelView; } @end
In BaseViewController.m
-(void)viewDidLoad { [super viewDidLoad]; myPickerView= [[PickerView alloc] initWithFrame:CGRectMake(0, 50, 320, 250)]; [self.view addSubview:myPickerView]; myPickerView.delegate = self; myLabelView= [[LabelView alloc] initWithFrame:CGRectMake(0, 50, 320, 250)]; [self.view addSubview:myLabelView]; myLabelView.delegate = self; myPickerView.hidden = YES; } #pragma mark PickerViewDelgate -(void)didTapBackButton { myPickerView.hidden = YES; myLabelView.hidden = NO; } #pragma mark LabelViewDelegate -(void)didTapTwiceLabelView { myPickerView.hidden = NO; myLabelView.hidden = YES; }