2016-03-28 2 views
2

Я создал пользовательский класс UIView. Я хочу вызвать действие при вызове backButton. Необходимо повторно использовать этот класс UIView вместе с действиями во всех контроллерах представлений. могу ли я писать в классе UIView или в контроллере просмотра?Как мы можем вызвать действие в пользовательском классе UIView? Необходимо повторно использовать класс UIView во всех контроллерах View

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

BackButton Действие

-(void)backButtonAction{ 
    [[self navigationController] popViewControllerAnimated:YES]; 
} 
+0

Ваша проблема заключается в том, что 'UIView' не имеет' свойство navigationController'. Это существует для контроллера вида. Вы можете получить то, что хотите, имея делегата, связанного с вашим представлением, и позволяя действию кнопки сообщать делегату (контроллеру просмотра) обрабатывать запрос «назад». –

+1

Да. Спасибо за ваш ответ. Выполнено с делегатами. Он работает, когда я вызываю контроллер вида. Но я, что вызвать делегатов, когда я нажимаю uibutton? Как я могу продолжить? – Balasubramanian

+0

Я не уверен, что понимаю. Если теперь у вас есть делегат в своем пользовательском представлении, вы можете вызвать любой метод делегата, который вы определили внутри 'backButtonAction'. –

ответ

4

это просто
Вы должны сделать Категория для UIViewController как UIViewController+Additions

  1. Нажмите File ->New ->File

  2. Нажмите Objective-C file под Sources в iOS затем нажмите кнопку Далее

  3. Теперь под File Type: выбрать либо Category

  4. Затем установите Имя файла: Additions и установить Класс: UIViewController


UIViewController + Additions.h
первым создать функцию BackButton в .h >>

-(void)addBackButton; 

UIViewController + Additions.m

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

Использование Like This:

просто импортировать категорию в любом классе ViewController #import "UIViewController+Additions.h"

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
    [self addBackButton]; 
} 
+0

Спасибо большое @Vvk! Быстрый и простой ответ. вы можете сказать мне, почему я не могу назвать действия в классе uiview? – Balasubramanian

+0

@Balasubramanian Добро пожаловать. – Vvk

+1

@Balasubramanian ** UIViewController ** является частью контроллера в шаблоне проектирования MVC. Задачей viewcontroller является обработка навигации между различными видами, нажатиями клавиш и т. Д., Где ** UIView ** - это объект, который мы используем для отображения наших вещей. – Vvk

Смежные вопросы