使父视图控制器可以访问子视图中的 UIButton
Posted
技术标签:
【中文标题】使父视图控制器可以访问子视图中的 UIButton【英文标题】:Make UIButton within sub view accessible to parent viewcontroller 【发布时间】:2014-05-22 15:03:00 【问题描述】:我的应用程序视图中有一个子视图,由本用户指南设置:
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】:首先在你的子视图 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
.m文件中的按钮点击方法
[self.delegate didClickedButton1];
(这表示该视图的委托将执行此 didClickedButton1: 方法) (如果在头文件中符合这个协议,Viewcontroller 可以成为委托)
现在,在父视图控制器中:
一个。符合使用 headerViewDelegate 导入“标题视图” 放
b.现在您可以将方法 didClickedButton1 放在父视图控制器中。 当您单击 button1 时会调用它。
-(void) didClickedButton1
//do your stuffs here
当您单击子视图中的按钮时,会在父视图控制器中调用此方法,因为在父视图控制器中,我们说我是您的代表(子视图),我将完成您拥有的任务在您的协议中提到(这里是 -(void) didClickedButton1: method )。
【讨论】:
以上是关于使父视图控制器可以访问子视图中的 UIButton的主要内容,如果未能解决你的问题,请参考以下文章
UICollectionViewCell 中的 UIButton 子视图不更改控件状态
NSLayoutConstraint 后子视图中的 UIButton 未收到触摸