Schaltfläche programmgesteuert zur Navigationsleiste hinzufügen

87

Hallo, ich muss die Schaltfläche auf der rechten Seite in der Navigationsleiste programmgesteuert einstellen, damit ich beim Drücken der Schaltfläche einige Aktionen ausführen kann. Ich habe die Navigationsleiste programmgesteuert von erstellt.

navBar=[[UINavigationBar alloc]initWithFrame:CGRectMake(0,0,320,44) ];

Ebenso muss ich die Schaltfläche auf der rechten Seite dieser Navigationsleiste hinzufügen. Dafür habe ich verwendet,

1.  

    UIView* container = [[UIView alloc] init];

    // create a button and add it to the container
    UIButton* button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 130, 44.01)];
    [container addSubview:button];
    [button release];

    // add another button
    button = [[UIButton alloc] initWithFrame:CGRectMake(160, 0, 50, 44.01)];
    [container addSubview:button];
    [button release];

    // now create a Bar button item
    UIBarButtonItem* item = [[UIBarButtonItem alloc] initWithCustomView:container];

    // set the nav bar's right button item
    self.navigationItem.rightBarButtonItem = item;
    [item release];

2.  

    UIImage *im;
    im=[UIImage imageNamed:@"back.png"];
    [button setImage:im forState:UIControlStateNormal];
    [im release];
    backButton = [[UIBarButtonItem alloc] initWithCustomView:button];       
    [backButton setImageInsets:UIEdgeInsetsMake(0, -10,5, 5)];
    [self.navigationItem setRightBarButtonItem:backButton];

3.  

    UIBarButtonItem *refreshItem = [[UIBarButtonItem alloc] initWithTitle:@"button"               style:UIBarButtonItemStylePlain target:self action:@selector(refreshLogsAction:)];
    self.navigationItem.rightBarButtonItem = refreshItem;

    [refreshItem release];

Ich habe alle diese Möglichkeiten ausprobiert, aber keine zeigt die Schaltfläche auf der rechten Seite an.

Mac
quelle

Antworten:

185

In meiner UIViewControllerabgeleiteten Klasse verwende ich Folgendes viewDidLoad:

UIBarButtonItem *flipButton = [[UIBarButtonItem alloc] 
                               initWithTitle:@"Flip"                                            
                               style:UIBarButtonItemStyleBordered 
                               target:self 
                               action:@selector(flipView:)];
self.navigationItem.rightBarButtonItem = flipButton;
[flipButton release];

Dadurch wird auf der rechten Seite eine Schaltfläche mit dem Titel Flip hinzugefügt, die die Methode aufruft:

-(IBAction)flipView

Das sieht dir # 3 sehr ähnlich, funktioniert aber in meinem Code.

Xetius
quelle
Ich musste dem Selektor einen Doppelpunkt hinzufügen - "action: @selector (flipView :)];
Rydell
22
UIImage* image3 = [UIImage imageNamed:@"back_button.png"];
CGRect frameimg = CGRectMake(15,5, 25,25);

UIButton *someButton = [[UIButton alloc] initWithFrame:frameimg];
[someButton setBackgroundImage:image3 forState:UIControlStateNormal];
[someButton addTarget:self action:@selector(Back_btn:)
     forControlEvents:UIControlEventTouchUpInside];
[someButton setShowsTouchWhenHighlighted:YES];

UIBarButtonItem *mailbutton =[[UIBarButtonItem alloc] initWithCustomView:someButton];
self.navigationItem.leftBarButtonItem =mailbutton;
[someButton release];

///// Ereignis genannt

-(IBAction)Back_btn:(id)sender
{
    //Your code here
}

SCHNELL:

var image3 = UIImage(named: "back_button.png")
var frameimg = CGRect(x: 15, y: 5, width: 25, height: 25)

var someButton = UIButton(frame: frameimg)
someButton.setBackgroundImage(image3, for: .normal)
someButton.addTarget(self, action: Selector("Back_btn:"), for: .touchUpInside)
someButton.showsTouchWhenHighlighted = true

var mailbutton = UIBarButtonItem(customView: someButton)
navigationItem?.leftBarButtonItem = mailbutton

func back_btn(_ sender: Any) {
    //Your code here
}
Bhavesh Nayi
quelle
9

Verwenden Sie diesen Code, um die Suchschaltfläche in der Navigationsleiste hinzuzufügen:

 UIBarButtonItem *searchButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSearch target:self action:@selector(toggleSearch:)];
self.navigationController.navigationBar.topItem.rightBarButtonItem = searchButton;

und implementieren Sie folgende Methode:

- (IBAction)toggleSearch:(id)sender
{
    // do something or handle Search Button Action.
}
Jabbar
quelle
Vielen Dank für Ihre Lösung. topItem war das, was mir fehlte
Kunal Gupta
6

So fügen Sie der Navigationsleiste schnell eine Schaltfläche zum Hinzufügen hinzu:

self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Add, target: self, action: "onAdd:")

onAdd:

func onAdd(sender: AnyObject) {
}
raf
quelle
6
self.navigationItem.rightBarButtonItem=[[[UIBarButtonItem alloc]initWithTitle:@"Save" style:UIBarButtonItemStylePlain target:self action:@selector(saveAction:)]autorelease];

-(void)saveAction:(UIBarButtonItem *)sender{

//perform your action

}
Gurpreet Singh
quelle
5

Schnelle Version, fügen Sie dies in viewDidLoad hinzu:

var doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Plain, target: self, action: "doneButton:")
navigationItem.rightBarButtonItem = doneButton

Und das in Ihrer View Controller-Klasse

func doneButton(sender: UIBarButtonItem) {
    println(111)
}
Esqarrouth
quelle
4

Verwenden Sie folgenden Code:

UIBarButtonItem *customBtn=[[UIBarButtonItem alloc] initWithTitle:@"Custom" style:UIBarButtonItemStylePlain target:self action:@selector(customBtnPressed)];
[self.navigationItem setRightBarButtonItem:customBtn];
Himanshu Mahajan
quelle
3

Verwenden Sie einfach den nativen editBarButton wie diesen

self.navigationItem.rightBarButtonItem = self.editButtonItem;
[self.navigationItem.rightBarButtonItem setAction:@selector(editBarBtnPressed)];

und dann

- (void)editBarBtnPressed {
    if ([infoTable isEditing]) {
        [self.editButtonItem setTitle:@"Edit"];
        [infoTable setEditing:NO animated:YES];
    }
    else {
        [self.editButtonItem setTitle:@"Done"];
        [infoTable setEditing:YES animated:YES];
    }
}

Habe Spaß...!!!

Salman Iftikhar
quelle
3

In der ViewDidLoad-Methode von ViewController.m

UIBarButtonItem *cancel = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action:@selector(back)];

[self.navigationItem setLeftBarButtonItem:cancel];

Der Selektor "(zurück)" ist eine Methode, um den aktuellen ViewController zu deaktivieren

iAnkit
quelle
3

Versuchen Sie dies. Es funktioniert für mich. Schaltfläche programmgesteuert zur Navigationsleiste hinzufügen . Außerdem setzen wir das Bild auf die Navigationsleistenschaltfläche.

Unten ist Code: -

  UIBarButtonItem *Savebtn=[[UIBarButtonItem alloc]initWithImage:
  [[UIImage imageNamed:@"bt_save.png"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] 
  style:UIBarButtonItemStylePlain target:self action:@selector(SaveButtonClicked)];
  self.navigationItem.rightBarButtonItem=Savebtn;

  -(void)SaveButtonClicked
  {
    // Add save button code.
  }
Jaywant Khedkar
quelle
1

Wenn Sie nicht nach einem BarButtonItem suchen, sondern nach einer einfachen Schaltfläche in der Navigationsleiste, funktioniert der folgende Code:

UIButton *aButton = [UIButton buttonWithType:UIButtonTypeCustom];
[aButton setBackgroundImage:[UIImage imageNamed:@"NavBar.png"] forState:UIControlStateNormal];
[aButton addTarget:self
            action:@selector(showButtonView:)
  forControlEvents:UIControlEventTouchUpInside];
aButton.frame = CGRectMake(260.0, 10.0, 30.0, 30.0);
[self.navigationController.navigationBar addSubview:aButton];
iking
quelle
-1

Hallo, alle miteinander !! Ich habe die Lösung für das vorliegende Problem erstellt, bei dem mit dem UIIMagePicker zwei UIInterface-Orientierungen gewünscht werden. In meinem ViewController, in dem ich den Übergang zum UIImagePickerController erledige

**Ich benutze ein..

-(void) editButtonPressed:(id)sender {
   BOOL editPressed = YES;
    NSUserDefaults *boolDefaults = [NSUserDefaults standardUserDefaults];
    [boolDefaults setBool:editPressed forKey:@"boolKey"];
    [boolDefaults synchronize];

    [self performSegueWithIdentifier:@"photoSegue" sender:nil]; 

}

** **.

Dann mache ich in der AppDelegate-Klasse Folgendes.

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {

    BOOL appDelBool;
    NSUserDefaults *boolDefaults = [NSUserDefaults standardUserDefaults];
    appDelBool = [boolDefaults boolForKey:@"boolKey"];

       if (appDelBool == YES)
           return (UIInterfaceOrientationMaskPortrait);
        else
            return UIInterfaceOrientationMaskLandscapeLeft;
}
John Z.
quelle
Entschuldigung, was war die Frage !! : P
Shad