Frage

Ich versuche, einen Refresh-Button auf die obere Leiste einer Navigationssteuerung ohne Erfolg hinzuzufügen.

Hier ist der Header:

@interface PropertyViewController : UINavigationController {

}

Hier ist, wie ich versuche, 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;
}
War es hilfreich?

Lösung

Versuchen Sie es in viewDidLoad tun. Generell sollten Sie etwas verschieben Sie bis zu diesem Punkt können wie auch immer, wenn ein UIViewController inited ist es noch eine ganze Weile sein könnte, bevor es zeigt, keinen Sinn in der Arbeit früh zu tun 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];
}

Wie, warum es nicht gerade arbeitet, kann ich nicht mit 100% iger Sicherheit sagen, ohne mehr Code zu sehen, aber eine Menge Sachen passiert zwischen init und der Sicht Laden, und Sie können etwas tun, das das navigationItem verursacht zurücksetzen dazwischen.

Andere Tipps

Versuchen Sie die Taste, um die navigationItem der View-Controller hinzufügen, die auf diese PropertyViewController Klasse geschoben werden wird Sie erstellt haben.

Das heißt:

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

Nun, diese Infobutton, die programmatisch wird in der Navigationsleiste angezeigt erstellt wurde. Die Idee ist, dass die Navigationssteuerung nimmt seine Anzeigeinformationen (Titel, Knöpfe, etc.) von der UIViewController ist, dass es um anzuzeigen. Sie addieren sich nicht wirklich Tasten und so direkt an die UINavigationController.

Es scheint, dass einige Leute (wie ich) kommen hier suchen, wie eine Navigationsleiste Button im Interface Builder hinzuzufügen. Die Antwort zeigt, wie es geht.

Fügen Sie eine Navigation Controller zu Storyboard

Wählen Sie View-Controller und dann in dem Xcode-Menü wählen Sie Editor> Embed In> Navigation Controller .

 image description hier

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

hinzufügen Bar-Taste Item

Ziehen Sie einen UIBarButtonItem aus der Objektbibliothek der oberen Navigationsleiste.

 image description hier

Es sollte wie folgt aussehen:

 image description hier

Set

Attribute

Sie können einen Doppelklick auf „Item“, um den Text zu etwas zu ändern, wie „Refresh“, aber es ist eine tatsächliche Symbol für Aktualisieren , die Sie verwenden können. Wählen Sie einfach die Attribute Inspector für die UIBarButtonItem und für System Item wählen Aktualisieren .

 image description hier

Das gibt Ihnen das Standard-Refresh-Symbol.

 image description hier

Fügen Sie eine IB Aktion

Steuer ziehen von UIBarButtonItem auf den View-Controller eine @IBAction hinzuzufügen.

class ViewController: UIViewController {

    @IBAction func refreshBarButtonItemTap(sender: UIBarButtonItem) {

        print("How refreshing!")
    }

}

Das ist es.

Es gibt eine Standard-Systemtaste für "Refresh":

- (void)viewDidLoad {
    [super viewDidLoad];

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

}

- (IBAction)refreshClicked:(id)sender {

}

Sie können diese verwenden:

Objective-C

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

Swift

let rightSideOptionButton = UIBarButtonItem()
rightSideOptionButton.title = "Right"
self.navigationItem.rightBarButtonItem = rightSideOptionButton
-(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];

}

Für das schnelle 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
Hier

ist die Lösung in Swift (Set-Optionen nach Bedarf):

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

Warum sind Sie Unterklassen UINavigationController? Es gibt keine Notwendigkeit, es zu Unterklasse, wenn alles, was Sie tun müssen, eine Schaltfläche, um es hinzuzufügen.

eine Hierarchie mit einem UINavigationController an der Spitze einrichten und dann in Ihrem Stamm viewDidLoad: Methode des View-Controller: Stellen Sie die Taste nach oben und an den Navigationspunkt befestigen durch den Aufruf

[[self navigationItem] setRightBarButtonItem:myBarButtonItem];

Sie können versuchen,

self.navigationBar.topItem.rightBarButtonItem = anotherButton;

Swift 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 !?")
}
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];

Versuchen Sie, für mich this.It Arbeit.

Navigationsleiste und auch Hintergrundbild auf der rechten Taste hinzugefügt.

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

Verwenden Sie diesen Code für die rechte Taste Navigationsleiste mit Ihrem gewann Titel und ruft eine Methode nach rechts klicken.

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

-(void)sortedDataCalled {
    NSLog(@"callBtn");    
}
    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");  
}
    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];
}

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

Kopieren Sie einfach und fügen Sie 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
}

Dieses Problem kann auftreten, wenn wir den View-Controller löschen oder versuchen, neuen View-Controller in der Interface Builder (main.storyboard) hinzuzufügen. Um dieses Problem zu beheben, bedarf es hinzufügen „Navigation Item“ innerhalb neuen View-Controller. Manchmal kommt es vor, dass wir neuen View-Controller-Bildschirm erstellen und es keine Verbindung zu „Navigation Item“ automatisch.

  1. Gehen Sie zur main.storyboard.
  2. Wählen Sie diese neue View-Controller.
  3. Gehen Sie auf die Dokumentgliederung.
  4. Überprüfen Sie View-Controller Inhalt.
  5. Wenn neue View-Controller dann keinen Navigationspunkt haben, kopiert Navigation Element aus dem vorherigen View-Controller und es in den neuen View-Controller einfügen.
  6. speichern und das Projekt reinigen.

Auch können Sie mehrere Tasten 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];
}

@Artilheiro: Wenn ihr ein navigationbased Projekt, u kann BaseViewController erstellen. Alle anderen Ansicht wird diese BaseView erben. In BaseView kann u generische Methoden definieren rechte Taste hinzuzufügen, oder linke Taste Text zu ändern.

ex:

  

@interface Base: UIViewController {

     

}   - (void) setBackButtonCaption: (NSString *) Beschriftung;

     

(void) setRightButtonCaption: (NSString *) Bildunterschrift selectot: (SEL) Selektor;

     

@end   // In BaseView.M

     

(void) setBackButtonCaption: (NSString *) caption   {

UIBarButtonItem *backButton =[[UIBarButtonItem alloc] init];

backButton.title= caption;
self.navigationItem.backBarButtonItem = backButton;
[backButton release];
  

}   - (void) setRightButtonCaption: (NSString *) Bildunterschrift selectot: (SEL) Selektor   {

  UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] init];
rightButton.title = caption;

rightButton.target= self;

[rightButton setAction:selector];

self.navigationItem.rightBarButtonItem= rightButton;

[rightButton release];
  

}

Und jetzt in jeder benutzerdefinierten Ansicht, implementieren diese Basisansicht, die die Methoden aufrufen:

  

@interface Loginview: Base {

In einiger Methodenaufruf Basismethode wie:

  

SEL sel = @selector (switchToForgotPIN);

     

[super setRightButtonCaption: @ "PIN vergessen" selectot: sel];

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top