Ios 如何在自定义UIView类中调用操作?需要在所有视图控制器中重用UIView类
我已经创建了一个自定义UIView类。每当调用backButton时,我都要调用一个操作。需要在所有视图控制器中重用此UIView类和操作。我可以在UIView类本身或视图控制器中编写吗Ios 如何在自定义UIView类中调用操作?需要在所有视图控制器中重用UIView类,ios,objective-c,uiview,uiviewcontroller,uibutton,Ios,Objective C,Uiview,Uiviewcontroller,Uibutton,我已经创建了一个自定义UIView类。每当调用backButton时,我都要调用一个操作。需要在所有视图控制器中重用此UIView类和操作。我可以在UIView类本身或视图控制器中编写吗 #import "CustomView.h" @implementation CustomView - (instancetype)init { if(self = [super init]){ //-------------------custom headerView----------
#import "CustomView.h"
@implementation CustomView
- (instancetype)init {
if(self = [super init]){
//-------------------custom headerView----------------
self.headerView = [[UIView alloc]init];
self.headerView.frame = CGRectMake(0, 0, SCREEN_WIDTH, 40);
self.headerView.backgroundColor = [UIColor redColor];
[self addSubview:self.headerView];
self.backButton = [[UIButton alloc]initWithFrame:CGRectMake(5,13, 12, 16)];
[self.backButton setImage:[UIImage imageNamed:@"back-btn.png"]
forState:UIControlStateNormal];
[self.backButton addTarget:self
action:@selector(backButtonAction)
forControlEvents:UIControlEventTouchUpInside];
[self.headerView addSubview:self.backButton];
}
return self;
}
后扣动作
-(void)backButtonAction{
[[self navigationController] popViewControllerAnimated:YES];
}
很简单
您必须为UIViewController创建类别,如UIViewController+添加项
单击文件->新建->文件
单击iOS中源下的Objective-C文件,然后单击下一步
现在在“文件类型”下:选择任一类别
然后设置文件名:Additions并设置Class:UIViewController
UIViewController+Additions.h
首先在.h>>
UIViewController+Additions.m
这样使用:
只需在任何viewcontroller类中导入类别导入UIViewController+Additions.h
很简单
您必须为UIViewController创建类别,如UIViewController+添加项
单击文件->新建->文件
单击iOS中源下的Objective-C文件,然后单击下一步
现在在“文件类型”下:选择任一类别
然后设置文件名:Additions并设置Class:UIViewController
UIViewController+Additions.h
首先在.h>>
UIViewController+Additions.m
这样使用:
只需在任何viewcontroller类中导入类别导入UIViewController+Additions.h
您的问题是UIView没有navigationController属性。为视图控制器存在的。通过让代理与视图关联,并让按钮操作告诉代理视图控制器处理返回请求,您可能会得到想要的结果。是。谢谢你的回复。完成与代表的对话。当我调用视图控制器时,它工作。但当我按下按钮时,我想触发代表什么?我怎样才能继续?我不知道我是否理解。如果您的自定义视图中现在有一个委托,则可以调用在backButtonAction中定义的任何委托方法。我的问题是self.backButton无法在UIView类中调用backButtonAction方法。您的问题是UIView没有navigationController属性。为视图控制器存在的。通过让代理与视图关联,并让按钮操作告诉代理视图控制器处理返回请求,您可能会得到想要的结果。是。谢谢你的回复。完成与代表的对话。当我调用视图控制器时,它工作。但当我按下按钮时,我想触发代表什么?我怎样才能继续?我不知道我是否理解。如果您现在的自定义视图中有一个委托,则可以调用backButtonAction中定义的任何委托方法。我的问题是self.backButton无法在UIView类中调用backButtonAction方法。非常感谢@Vvk!快速简单的回答。你能告诉我为什么我不能在uiview类中调用操作吗?@Balasubramanian UIViewController是MVC设计模式中的控制器部分。viewcontroller的任务是处理不同视图之间的导航、按键等。UIView是我们用来显示我们的东西的对象。你不知道这个答案在将大量重复代码移到主要UIViewController类之外方面给了我多少启发。没有比你更详细的答案了。非常感谢。@MikeCritchley欢迎您。enjoy@Vvk谢谢你的解释!在VC中重写方法也很容易。非常感谢@Vvk!快速简单的回答。你能告诉我为什么我不能在uiview类中调用操作吗?@Balasubramanian UIViewController是MVC设计模式中的控制器部分。viewcontroller的任务是处理不同视图之间的导航、按键等。UIView是我们用来显示我们的东西的对象。你不知道这个答案在将大量重复代码移到主要UIViewController类之外方面给了我多少启发。没有比你更详细的答案了。非常感谢。@MikeCritchley欢迎您。enjoy@Vvk谢谢你的解释!在VC中重写方法也很容易。
-(void)addBackButton;
-(void)addBackButton
{
self.navigationItem.leftBarButtonItem = nil;
UIButton *aBtn = [UIButton buttonWithType:UIButtonTypeCustom];
// [aBtn setTitle:@"Back" forState:UIControlStateNormal];
[aBtn setImage:[UIImage imageNamed:@"back-btn.png"] forState:UIControlStateNormal];
[aBtn setFrame:CGRectMake(0, 0,50, 64)];
[aBtn.titleLabel setFont:[UIFont systemFontOfSize:18.0]];
aBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
aBtn.imageEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0);
aBtn.titleEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0);
[aBtn setTitleColor:[UIColor colorWithRed:1/255.0 green:65/255.0 blue:96/255.0 alpha:1.0] forState:UIControlStateNormal];
[aBtn addTarget:self action:@selector(backButtonAction) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *aBarBtn = [[UIBarButtonItem alloc]initWithCustomView:aBtn];
self.navigationItem.leftBarButtonItem = aBarBtn;
}
-(void)backButtonAction
{
[self.navigationController popViewControllerAnimated:YES];
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
[self addBackButton];
}