使子视图中的UIButton可以访问父视图控制器

时间:2014-05-22 15:03:00

标签: ios objective-c uiview uibutton

我的应用程序视图中有一个子视图,由本用户指南设置:

http://patientprogrammer.wordpress.com/2012/03/12/re-usable-subviews-in-ios/

我有一个UIView,它是子视图.xib文件的文件所有者,它显示视图:

-(void)awakeFromNib

{
    [[NSBundle mainBundle] loadNibNamed:@"headerview" owner:self options:nil];
    [self addSubview:self.view_header];
}

现在这个子视图中有一个按钮,我需要点击它。是否可以从父视图UIViewController访问此按钮?

1 个答案:

答案 0 :(得分:1)

  1. 首先将子视图headerView(headerView.h)中的协议定义为:

    @protocol headerViewDelegate;
    
    @interface hearderView : UIView 
    @property (nonatomic,strong)IBAction UIButton * button1;
    @property (nonatomic, assign) id<headerViewDelegate> delegate;
    
    @end
    
    @protocol headerViewDelegate <NSObject>
    
    @optional
    
    -(void)didClickedButton1;
    
    @end
    
  2. 在.m文件中单击按钮的方法

    [self.delegate didClickedButton1];
    

    (这表示此视图的委托将执行此didClickedButton1:方法) (如果Viewcontroller在头文件中符合此协议,则可以成为委托)

  3. 现在,在父视图控制器中:

    一个。符合使用headerViewDelegate  导入“headerview”  把

    湾现在你可以把方法didClickedButton1放在父视图控制器中。  单击button1时会调用此方法。

     -(void) didClickedButton1{
    
      //do your stuffs here
      }
    

    当您单击子视图中的按钮时,在父视图控制器中调用此方法,因为在父视图控制器中我们说我是您的代表(子视图)并且我将要执行此操作你在协议中提到的任务(这里是 - (void)didClickedButton1:方法)。