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.

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.


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
}

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.
}

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) {
}

6
self.navigationItem.rightBarButtonItem=[[[UIBarButtonItem alloc]initWithTitle:@"Save" style:UIBarButtonItemStylePlain target:self action:@selector(saveAction:)]autorelease];

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

//perform your action

}

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)
}

4

Verwenden Sie folgenden Code:

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

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ß...!!!


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


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.
  }

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

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

Entschuldigung, was war die Frage !! : P
Shad
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.