2016-03-28 5 views
2

Ich habe eine benutzerdefinierte UIView-Klasse erstellt. Ich möchte eine Aktion aufrufen, wenn der BackButton aufgerufen wird. Sie müssen diese UIView-Klasse zusammen mit Aktionen in allen View-Controllern wiederverwenden. Kann ich in der UIView-Klasse selbst schreiben oder Controller anzeigen?Wie können wir Aktion in benutzerdefinierten UIView-Klasse aufrufen? Sie müssen die UIView-Klasse in allen View-Controllern wiederverwenden

#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 Aktion

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

Ihr Problem ist, dass ein 'UIView' keine' navigationController' Eigenschaft hat. Das gibt es für einen View-Controller. Sie erhalten möglicherweise, was Sie wollen, indem Sie einen Delegaten mit Ihrer Ansicht verknüpfen und die Aktion der Schaltfläche dem Delegaten (View-Controller) mitteilen, dass er die Anfrage "zurück" bearbeitet. –

+1

Ja. Vielen Dank für Ihre Antwort. Fertig mit Delegierten. Es funktioniert, wenn ich den View-Controller anrufe. Aber ich was Delegierte auslösen, wenn ich den uibutton drücke? Wie kann ich fortfahren? – Balasubramanian

+0

Ich bin mir nicht sicher, ob ich das verstehe. Wenn Sie jetzt einen Delegaten in Ihrer benutzerdefinierten Ansicht haben, können Sie jede Delegate-Methode aufrufen, die Sie in "backButtonAction" definiert haben. –

Antwort

4

es ist einfach
Sie müssen Kategorie für UIViewController wie UIViewController+Additions

  1. Click File machen ->New ->File

  2. Klicken Sie Objective-C file unter Sources in iOS dann klicken Sie auf Weiter

  3. Jetzt unter File Type: wählen entweder Category

  4. Dann setzen Dateiname: Additions und setzen Klasse: UIViewController


UIViewController + Additions.h
zuerst Ihre Funktion in Backbutton .h erstellen >>

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

Zeichen verwendet werden:

nur importieren Kategorie in jeder Klasse Viewcontroller #import "UIViewController+Additions.h"

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

Vielen Dank @Vvk! Schnelle und einfache Antwort. Kannst du mir sagen, warum ich keine Aktionen in der Klasse uiview aufrufen kann? – Balasubramanian

+0

@Balasubramanian Willkommen. – Vvk

+1

@Balasubramanian Der ** UIViewController ** ist der Controller-Teil im MVC-Entwurfsmuster. Die Aufgabe des Viewcontrollers besteht darin, die Navigation zwischen verschiedenen Ansichten, Tastendrücken usw. zu übernehmen, wobei ** UIView ** das Objekt ist, mit dem wir unsere Objekte anzeigen. – Vvk

Verwandte Themen