Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在自定义UIView类中调用操作?需要在所有视图控制器中重用UIView类_Ios_Objective C_Uiview_Uiviewcontroller_Uibutton - Fatal编程技术网

Ios 如何在自定义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----------

我已经创建了一个自定义UIView类。每当调用backButton时,我都要调用一个操作。需要在所有视图控制器中重用此UIView类和操作。我可以在UIView类本身或视图控制器中编写吗

#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];
}