it-swarm.com.de

Wie füge ich einen rechten Button zu einem UINavigationController hinzu?

Ich versuche, der Aktualisierung einer Navigationssteuerung ohne Erfolg eine Aktualisierungsschaltfläche hinzuzufügen.

Hier ist die Kopfzeile:

@interface PropertyViewController : UINavigationController {

}

So versuche ich es hinzuzufügen:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
        UIBarButtonItem *anotherButton = [[UIBarButtonItem alloc] initWithTitle:@"Show" style:UIBarButtonItemStylePlain
                                          target:self action:@selector(refreshPropertyList:)];      
        self.navigationItem.rightBarButtonItem = anotherButton;
    }
    return self;
}
186
Artilheiro

Versuchen Sie es in viewDidLoad. Im Allgemeinen sollten Sie alles, was Sie können, bis zu diesem Punkt verschieben. Wenn ein UIViewController eingesetzt wird, kann es noch eine Weile dauern, bis er angezeigt wird. Es hat keinen Sinn, frühzeitig zu arbeiten und Speicher zu binden.

- (void)viewDidLoad {
  [super viewDidLoad];

  UIBarButtonItem *anotherButton = [[UIBarButtonItem alloc] initWithTitle:@"Show" style:UIBarButtonItemStylePlain target:self action:@selector(refreshPropertyList:)];          
  self.navigationItem.rightBarButtonItem = anotherButton;
  // exclude the following in ARC projects...
  [anotherButton release];
}

Warum es derzeit nicht funktioniert, kann ich nicht mit hundertprozentiger Sicherheit sagen, ohne mehr Code zu sehen, aber zwischen init und dem Laden der Ansicht passiert eine Menge Sachen. Möglicherweise tun Sie etwas, das dazu führt, dass sich das navigationItem neu einstellt zwischen.

360
Louis Gerbarg

Fügen Sie die Schaltfläche zum navigationItem des View-Controllers hinzu, der auf die von Ihnen erstellte PropertyViewController-Klasse verschoben werden soll.

Das ist:

MainViewController *vc = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeInfoLight];
[infoButton addTarget:self action:@selector(showInfo) forControlEvents:UIControlEventTouchUpInside];
vc.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:infoButton] autorelease];

PropertyViewController *navController = [[PropertyViewController alloc] initWithRootViewController:vc];

Jetzt wird dieser programmgesteuert erstellte infoButton in der Navigationsleiste angezeigt. Die Idee ist, dass der Navigationscontroller seine Anzeigeinformationen (Titel, Schaltflächen usw.) von der UIViewController abruft, die er gerade anzeigt. Sie fügen der UINavigationController eigentlich keine Buttons und solche direkt hinzu.

37
Adam

Es scheint, dass einige Leute (wie ich) hierher kommen und nach einem Navigationsleisten-Button im Interface Builder suchen. Die Antwort unten zeigt, wie es geht.

Fügen Sie Ihrem Storyboard einen Navigations-Controller hinzu

Wählen Sie Ihren View Controller aus und wählen Sie im Xcode-Menü Editor> Einbetten in> Navigationscontroller.

 enter image description here

Alternativ können Sie ein UINavigationBar aus der Objektbibliothek hinzufügen.

Fügen Sie ein Bar-Schaltflächenelement hinzu

Ziehen Sie ein UIBarButtonItem aus der Objektbibliothek in die obere Navigationsleiste.

 enter image description here

Es sollte so aussehen:

 enter image description here

Legen Sie die Attribute fest

Sie können auf "Element" doppelklicken, um den Text in etwas wie "Aktualisieren" zu ändern, aber es gibt ein Symbol für Aktualisieren, das Sie verwenden können. Wählen Sie einfach den Attribut-Inspector für UIBarButtonItem und für System Item wählen Sie Refresh.

 enter image description here

Dadurch erhalten Sie das Standard-Aktualisierungssymbol.

 enter image description here

Fügen Sie eine IB-Aktion hinzu

Ziehen Sie die Steuerung vom UIBarButtonItem zum View Controller, um einen @IBAction hinzuzufügen.

class ViewController: UIViewController {

    @IBAction func refreshBarButtonItemTap(sender: UIBarButtonItem) {

        print("How refreshing!")
    }

}

Das ist es. 

24
Suragch

Es gibt eine Standard-Systemschaltfläche für "Aktualisieren":

- (void)viewDidLoad {
    [super viewDidLoad];

    UIBarButtonItem *refreshButton = [[[UIBarButtonItem alloc] 
                            initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh
                            target:self action:@selector(refreshClicked:)] autorelease];
    self.navigationItem.rightBarButtonItem = refreshButton;

}

- (IBAction)refreshClicked:(id)sender {

}
13
Manni

Sie können dies verwenden:

Ziel c

UIBarButtonItem *rightSideOptionButton = [[UIBarButtonItem alloc] initWithTitle:@"Right" style:UIBarButtonItemStylePlain target:self action:@selector(rightSideOptionButtonClicked:)];          
self.navigationItem.rightBarButtonItem = rightSideOptionButton;

Schnell

let rightSideOptionButton = UIBarButtonItem()
rightSideOptionButton.title = "Right"
self.navigationItem.rightBarButtonItem = rightSideOptionButton
10
Vandit Mehta

Für Swift 2:

self.title = "Your Title"

var homeButton : UIBarButtonItem = UIBarButtonItem(title: "LeftButtonTitle", style: UIBarButtonItemStyle.Plain, target: self, action: Selector("yourMethod"))

var logButton : UIBarButtonItem = UIBarButtonItem(title: "RigthButtonTitle", style: UIBarButtonItemStyle.Plain, target: self, action: Selector("yourMethod"))

self.navigationItem.leftBarButtonItem = homeButton
self.navigationItem.rightBarButtonItem = logButton
6
fandro
-(void) viewWillAppear:(BOOL)animated
{

    UIButton *btnRight = [UIButton buttonWithType:UIButtonTypeCustom];
    [btnRight setFrame:CGRectMake(0, 0, 30, 44)];
    [btnRight setImage:[UIImage imageNamed:@"image.png"] forState:UIControlStateNormal];
    [btnRight addTarget:self action:@selector(saveData) forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *barBtnRight = [[UIBarButtonItem alloc] initWithCustomView:btnRight];
    [barBtnRight setTintColor:[UIColor whiteColor]];
    [[[self tabBarController] navigationItem] setRightBarButtonItem:barBtnRight];

}
6
Gaurav Gilani

Hier ist die Lösung in Swift (Optionen nach Bedarf einstellen):

var optionButton = UIBarButtonItem()
optionButton.title = "Settings"
//optionButton.action = something (put your action here)
self.navigationItem.rightBarButtonItem = optionButton
5
vontell

Du kannst es versuchen 

self.navigationBar.topItem.rightBarButtonItem = anotherButton;
4
user2999133

Warum sind Sie Unterklassen UINavigationController? Es ist nicht notwendig, sie zu subclassieren, wenn Sie lediglich eine Schaltfläche hinzufügen müssen.

Richten Sie eine Hierarchie mit einer Variablen UINavigationController oben und anschließend in der Methode viewDidLoad: des Root-View-Controllers ein: Richten Sie die Schaltfläche ein und hängen Sie sie mit dem Navigationselement an

[[self navigationItem] setRightBarButtonItem:myBarButtonItem];
4
Jasarien

Schnell 4:

override func viewDidLoad() {
    super.viewDidLoad()

    navigationItem.leftBarButtonItem = UIBarButtonItem(title: "tap me", style: .plain, target: self, action: #selector(onButtonTap))
}

@objc func onButtonTap() {
    print("you tapped me !?")
}
3
ergunkocak
UIView *view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 110, 50)];
view.backgroundColor = [UIColor clearColor];

UIButton *settingsButton =  [UIButton buttonWithType:UIButtonTypeCustom];
[settingsButton setImage:[UIImage imageNamed:@"settings_icon_png.png"] forState:UIControlStateNormal];
[settingsButton addTarget:self action:@selector(logOutClicked) forControlEvents:UIControlEventTouchUpInside];
[settingsButton setFrame:CGRectMake(40,5,32,32)];
[view addSubview:settingsButton];

UIButton *filterButton =  [UIButton buttonWithType:UIButtonTypeCustom];
[filterButton setImage:[UIImage imageNamed:@"filter.png"] forState:UIControlStateNormal];
[filterButton addTarget:self action:@selector(openActionSheet) forControlEvents:UIControlEventTouchUpInside];
[filterButton setFrame:CGRectMake(80,5,32,32)];
[view addSubview:filterButton];



self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:view];
2
Sandeep

Versuchen Sie das. Es funktioniert für mich.

Navigationsleiste und fügte ein Hintergrundbild zur rechten Schaltfläche hinzu. 

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

Verwenden Sie diesen Code für die Navigationsschaltfläche mit der rechten Maustaste und rufen Sie eine Methode auf, nachdem Sie mit der rechten Maustaste geklickt haben.

UIBarButtonItem *btnSort=[[UIBarButtonItem alloc]initWithTitle:@"right" style:UIBarButtonItemStylePlain target:self action:@selector(sortedDataCalled)];
   self.navigationItem.rightBarButtonItem=btnSort;
}

-(void)sortedDataCalled {
    NSLog(@"callBtn");    
}
1
Naiyer Aghaz
    self.navigationItem.rightBarButtonItem =[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refreshData)];



}

-(void)refreshData{
    progressHud= [MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES];
    [progressHud setLabelText:@"拼命加载中..."];
    [self loadNetwork];
}
0
Gank

Sie können auch mehrere Schaltflächen mit rightBarButtonItems hinzufügen.

-(void)viewDidLoad{

    UIBarButtonItem *button1 = [[UIBarButtonItem alloc] initWithTitle:@"button 1" style:UIBarButtonItemStylePlain target:self action:@selector(YOUR_METHOD1:)];
    UIBarButtonItem *button2 = [[UIBarButtonItem alloc] initWithTitle:@"button 2" style:UIBarButtonItemStylePlain target:self action:@selector(YOUR_METHOD2:)];

    self.navigationItem.rightBarButtonItems = @[button1, button2];
}
0
yoAlex5

Dieses Problem kann auftreten, wenn wir den View Controller löschen oder versuchen, einen neuen View Controller im Interface Builder (Main.storyboard) hinzuzufügen. Um dieses Problem zu beheben, müssen Sie im neuen View-Controller "Navigationselement" hinzufügen. Es kommt vor, dass wir einen neuen View-Controller-Bildschirm erstellen und nicht automatisch eine Verbindung zu "Navigationselement" herstellen. 

  1. Gehen Sie zum Main.storyboard.
  2. Wählen Sie diesen neuen Controller aus. 
  3. Gehen Sie zur Dokumentgliederung.
  4. Überprüfen Sie die Inhalte der Ansicht Controller.
  5. Wenn der neue View Controller kein Navigationselement hat, kopieren Sie das Navigationselement aus dem vorherigen View Controller und fügen Sie es in den neuen View Controller ein.
  6. speichern und reinigen Sie das Projekt. 
0
NilamK
    UIBarButtonItem *rightBarButtonItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(add:)];
self.navigationItem.rightBarButtonItem = rightBarButtonItem;
- (void)viewWillAppear:(BOOL)animated
{    
    [self setDetailViewNavigationBar];    
}
-(void)setDetailViewNavigationBar
{
    self.navigationController.navigationBar.tintColor = [UIColor purpleColor];
    [self setNavigationBarRightButton];
    [self setNavigationBarBackButton];    
}
-(void)setNavigationBarBackButton// using custom button 
{
   UIBarButtonItem *leftButton = [[UIBarButtonItem alloc] initWithTitle:@"  Back " style:UIBarButtonItemStylePlain target:self action:@selector(onClickLeftButton:)];          
   self.navigationItem.leftBarButtonItem = leftButton;    
}
- (void)onClickLeftButton:(id)sender 
{
   NSLog(@"onClickLeftButton");        
}
-(void)setNavigationBarRightButton
{

  UIBarButtonItem *anotherButton = [[UIBarButtonItem alloc] initWithTitle:@"Show" style:UIBarButtonItemStylePlain target:self action:@selector(onClickrighttButton:)];          
self.navigationItem.rightBarButtonItem = anotherButton;   

}
- (void)onClickrighttButton:(id)sender 
{
   NSLog(@"onClickrighttButton");  
}
0
tv.ashvin

Sie sollten Ihr barButtonItem in der - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated-Methode hinzufügen.

0
Retik

Kopieren Sie einfach diesen Objective-C-Code.

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [self addRightBarButtonItem];
}
- (void) addRightBarButtonItem {
    UIButton *btnAddContact = [UIButton buttonWithType:UIButtonTypeContactAdd];
    [btnAddContact addTarget:self action:@selector(addCustomerPressed:) forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithCustomView:btnAddContact];
    self.navigationItem.rightBarButtonItem = barButton;
}

#pragma mark - UIButton
- (IBAction)addCustomerPressed:(id)sender {
// Your right button pressed event
}
0
Vivek