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;
}
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.
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.
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.
Wählen Sie Ihren View Controller aus und wählen Sie im Xcode-Menü Editor> Einbetten in> Navigationscontroller.
Alternativ können Sie ein UINavigationBar
aus der Objektbibliothek hinzufügen.
Ziehen Sie ein UIBarButtonItem
aus der Objektbibliothek in die obere Navigationsleiste.
Es sollte so aussehen:
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.
Dadurch erhalten Sie das Standard-Aktualisierungssymbol.
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.
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 {
}
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
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
-(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];
}
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
Du kannst es versuchen
self.navigationBar.topItem.rightBarButtonItem = anotherButton;
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];
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 !?")
}
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 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;
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");
}
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 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];
}
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.
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");
}
Sie sollten Ihr barButtonItem in der - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
-Methode hinzufügen.
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
}