2013-07-31 6 views
6

Ich versuche die Navigationsleiste anzupassen, indem ich eine benutzerdefinierte Schaltfläche zum rightBarButtonItem hinzufüge. Eine zu erstellen ist ziemlich einfach.Hinzufügen von Aktion und Ziel zu einem benutzerdefinierten Navigations-BarButtonItem?

UIImage *myImage = [UIImage imageNamed:@"menu-icon.png"]; 

UIButton *myButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[myButton setFrame:CGRectMake(0, 0, myImage.size.width, myImage.size.height)]; 
[myButton setBackgroundImage:myImage forState:UIControlStateNormal]; 

UIBarButtonItem *myButtonItem = [[UIBarButtonItem alloc] initWithCustomView:myButton]; 

[navItem setLeftBarButtonItem:myButtonItem animated:YES]; 

Sieht gut aus, außer dass ich jetzt die Ziel- oder Aktionseigenschaften nicht einstellen kann. Der folgende Code tut nichts:

myButtonItem.target = myTarget; 
myButtonItem.action = @selector(myButtonAction); 

Ich fand, dass der Grund, warum es nicht funktioniert, weil ich die UIBarButtonItem mit -initWithCustomView initialisiert. Apples Dokumentation sagt:

Das bar-Button-Element, das von dieser Methode erstellt wird, ruft die Aktionsmethode seines Ziels als Reaktion auf Benutzerinteraktionen nicht auf. Stattdessen erwartet das Balkenschaltflächenelement, dass die angegebene benutzerdefinierte Ansicht alle Benutzerinteraktionen verarbeitet und eine entsprechende Antwort bereitstellt.

Ich bin etwas verwirrt, was genau Apple damit meint. Soll ich ein benutzerdefiniertes Steuerelement oder etwas erstellen? Ich habe das noch nicht wirklich gemacht und bin mir nicht sicher, wo ich anfangen soll.

Hat jemand irgendwelche Vorschläge, wie Sie dies oder eine alternative Möglichkeit zum Einrichten einer benutzerdefinierten Navigationsleistenschaltfläche ausführen können?

ANTWORT -------------------------------------------- --------------

Nur hatte diese Methode der UIButton hinzuzufügen:

[myButton addTarget:myTarget action:@selector(myButtonAction) forControlEvents:UIControlEventTouchUpInside]; 

Antwort

6

Es ist ziemlich einfach, Sie müssen Ziel für Uibutton nicht für Uibarbuttonitem hinzufügen.

Um mehr zu erklären, was Sie für uibarbuttonitem wollen, antworten Sie auf die innere Aktionsmethode, da die Dokumentation besagt, dass Sie dies für uibutton tun müssen, da Sie Ihr uibarbuttonitem mit der benutzerdefinierten Ansicht in Ihrem Fall uibutton initialisieren.

+0

Danke, habe nicht gemerkt, dass es so einfach war. – DJSK

4

hinzufügen eine Aktion und Ziel zu einem UIButton wie folgt aus:

[myButton addTarget:self 
      action:@selector(handleMyButtonTap) 
    forControlEvents:UIControlEventTouchUpInside];

Fügen Sie eine Aktion und ein Ziel zu einem UIBarButtonItem wie folgt hinzu:

[myBarButtonItem setAction:@selector(handleBarButtonTap)]; 
[myBarButtonItem setTarget:aTarget];
+0

Es ist nicht mit funktionierten myButtonItem, aber als ich es zu myButton hinzugefügt habe, hat es funktioniert! Vielen Dank! – DJSK

0

Mit Hilfe der Antworten von hgwhittle und Mustafa ich umgesetzt und es funktioniert perfekt hier ist die komplette schnipp jemand

 //Create ImageButton 
     UIImage *shareBtnIcon = [UIImage imageNamed:@"dummy_share_icon_22"]; 

     UIButton *shareButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
     [shareButton setFrame:CGRectMake(0, 0, shareBtnIcon.size.width, shareBtnIcon.size.height)]; 
     [shareButton setBackgroundImage:shareBtnIcon forState:UIControlStateNormal]; 

     [shareButton addTarget:self action:@selector(shareButtonClicked:) forControlEvents:UIControlEventTouchUpInside]; 

     //Create BarButton using ImageButton 
     UIBarButtonItem *shareBarBtn = [[UIBarButtonItem alloc] initWithCustomView:shareButton]; 

     //Add BarButton to NavigationBar 
     self.navigationItem.rightBarButtonItems = [[NSArray alloc] initWithObjects:shareBarBtn, nil]; 
helfen kann
//method for share butto click 
-(void) shareButtonClicked:(UIButton*)sender 
{ 
    NSLog(@"you clicked on share button %ld"); 
}