プログラムでUINavigationBarにボタンを追加する方法は?
rightbutton
にNavigationBar
を設定するサンプルコード。
UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:@"Done"
style:UIBarButtonItemStyleDone target:nil action:nil];
UINavigationItem *item = [[UINavigationItem alloc] initWithTitle:@"Title"];
item.rightBarButtonItem = rightButton;
item.hidesBackButton = YES;
[bar pushNavigationItem:item animated:NO];
ただし、通常はNavigationController
があり、次のように記述できます。
UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:@"Done"
style:UIBarButtonItemStyleDone target:nil action:nil];
self.navigationItem.rightBarButtonItem = rightButton;
上記の答えは良いですが、私はそれらをさらにいくつかのヒントで具体化したいです:
戻るボタンのタイトル(ナビゲーションバーの左側にある矢印のようなもの)を変更する場合は、表示するものではなく、前のView Controllerで行う必要があります。 「ちょっと、これの上に別のView Controllerをプッシュしたら、デフォルトの代わりに「Back」(または何でも)「戻る」ボタンを呼び出してください」というようなものです。
UIPickerViewが表示されている間など、特別な状態のときに[戻る]ボタンを非表示にする場合は、self.navigationItem.hidesBackButton = YES;
を使用し、特別な状態を離れるときに忘れずに戻すようにしてください。
特別なシンボリックボタンの1つを表示する場合は、UIBarButtonSystemItemAdd
のような値を持つinitWithBarButtonSystemItem:target:action
の形式を使用します
そのシンボルの意味はあなた次第ですが、ヒューマンインターフェイスガイドラインに注意してください。 UIBarButtonSystemItemAddを使用してアイテムを削除すると、おそらくアプリケーションが拒否されます。
カスタムボタンをナビゲーションバーに追加します(buttonItemの画像を使用し、アクションメソッド(void)openView {}を指定します)。
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(0, 0, 32, 32);
[button setImage:[UIImage imageNamed:@"settings_b.png"] forState:UIControlStateNormal];
[button addTarget:self action:@selector(openView) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *barButton=[[UIBarButtonItem alloc] init];
[barButton setCustomView:button];
self.navigationItem.rightBarButtonItem=barButton;
[button release];
[barButton release];
次の例では、右側のナビゲーションバーに「連絡先」というタイトルのボタンが表示されます。そのアクションは、viewcontrollerから「contact」という名前のメソッドを呼び出します。この行がないと、右ボタンは表示されません。
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Contact"
style:UIBarButtonItemStylePlain target:self action:@selector(contact:)];;
Swift 2では、次のようにします。
let rightButton: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Done, target: nil, action: nil)
self.navigationItem.rightBarButtonItem = rightButton
(大きな変更ではありません)Swift 4/5では、次のようになります。
let rightButton: UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItem.Style.done, target: nil, action: nil)
self.navigationItem.rightBarButtonItem = rightButton
次を使用しない理由:( iPhoneナビゲーションバーにカスタムの戻るボタンを描く )
// Add left
UINavigationItem *previousItem = [[UINavigationItem alloc] initWithTitle:@"Back title"];
UINavigationItem *currentItem = [[UINavigationItem alloc] initWithTitle:@"Main Title"];
[self.navigationController.navigationBar setItems:[NSArray arrayWithObjects:previousItem, currentItem, nil] animated:YES];
// set the delegate to self
[self.navigationController.navigationBar setDelegate:self];
スイフト3
let cancelBarButton = UIBarButtonItem(title: "Cancel", style: .done, target: self, action: #selector(cancelPressed(_:)))
cancelBarButton.setTitleTextAttributes( [NSFontAttributeName : UIFont.cancelBarButtonFont(),
NSForegroundColorAttributeName : UIColor.white], for: .normal)
self.navigationItem.leftBarButtonItem = cancelBarButton
func cancelPressed(_ sender: UIBarButtonItem ) {
self.dismiss(animated: true, completion: nil)
}