Ajouter un bouton à la barre de navigation par programmation

87

Salut, j'ai besoin de régler le bouton sur le côté droit, dans la barre de navigation, par programme, de sorte que si j'appuie sur le bouton, j'effectue certaines actions. J'ai créé la barre de navigation, par programme par;

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

De même, je dois ajouter le bouton, sur le côté droit de cette barre de navigation. Pour cela j'ai utilisé,

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

J'ai essayé toutes ces méthodes, mais aucune n'affiche le bouton sur le côté droit.

Mac
la source

Réponses:

186

Dans ma UIViewControllerclasse dérivée, j'utilise ce qui suit à l'intérieur viewDidLoad:

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

Cela ajoute un bouton sur le côté droit avec le titre Flip, qui appelle la méthode:

-(IBAction)flipView

Cela ressemble beaucoup à vous # 3, mais cela fonctionne dans mon code.

Xetius
la source
J'avais besoin d'ajouter un deux-points au sélecteur - "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];

///// événement appelé

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

RAPIDE:

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
la source
9

Pour ajouter un bouton de recherche sur la barre de navigation, utilisez ce code:

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

et implémentez la méthode suivante:

- (IBAction)toggleSearch:(id)sender
{
    // do something or handle Search Button Action.
}
Jabbar
la source
merci beaucoup pour votre solution. topItem était la chose qui me manquait
Kunal Gupta
6

Comment ajouter un bouton d'ajout à la barre de navigation dans Swift:

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

onAdd:

func onAdd(sender: AnyObject) {
}
raf
la source
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
la source
5

Version Swift, ajoutez ceci dans viewDidLoad:

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

Et ceci dans votre classe View Controller

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

Utilisez le code suivant:

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

EditBarButton natif d'utilisation simple comme celui-ci

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

puis

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

S'amuser...!!!

Salman Iftikhar
la source
3

Dans la méthode ViewDidLoad de ViewController.m

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

[self.navigationItem setLeftBarButtonItem:cancel];

Le sélecteur "(back)" est une méthode pour ignorer le ViewController actuel

iAnkit
la source
3

Essayez ceci, cela fonctionne pour moi. Ajouter un bouton à la barre de navigation par programme, nous définissons également l'image sur le bouton de la barre de navigation,

Voici le 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
la source
1

Si vous ne recherchez pas un BarButtonItem mais un simple bouton sur navigationBar, le code ci-dessous fonctionne:

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
la source
-1

Bonjour à tous !! J'ai créé la solution au problème actuel où deux orientations UIInterface sont voulues à l'aide de UIIMagePicker .. Dans mon ViewController où je gère la transition vers l'UIImagePickerController

** J'utilise un ..

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

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

}

**

Ensuite, dans la classe AppDelegate, je fais ce qui suit.

- (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
la source
Désolé quelle était la question !! : P
Shad