UI 내비게이션 컨트롤러에 오른쪽 버튼을 추가하는 방법은 무엇입니까?
내비게이션 컨트롤러의 상단 바에 새로 고침 버튼을 추가하려고 하지만 실패했습니다.
다음은 머리글입니다.
@interface PropertyViewController : UINavigationController {
}
제가 추가하려고 하는 방법은 다음과 같습니다.
- (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;
}
viewDidLoad에서 해보세요.일반적으로 UIView 컨트롤러가 초기화될 때까지 가능한 모든 작업을 연기해야 합니다. 그러면 표시되는 데 시간이 오래 걸릴 수 있습니다. 초기 작업을 수행하고 메모리를 연결하는 것이 의미가 없습니다.
- (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];
}
현재 작동하지 않는 이유에 대해서는 코드를 더 보지 않고는 100% 확실하게 말할 수 없지만, init와 view loading 사이에 많은 일이 발생하고 탐색을 유발하는 무언가를 하고 있을 수 있습니다.중간에 재설정할 항목입니다.
탐색에 단추를 추가해 보십시오.이 위에 푸시할 뷰 컨트롤러의 항목PropertyViewController
작성한 클래스입니다.
즉, 다음과 같습니다.
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];
이제 프로그래밍 방식으로 만들어진 이 infoButton이 탐색 모음에 표시됩니다.이 개념은 내비게이션 컨트롤러가 디스플레이 정보(제목, 버튼 등)를 선택하는 것입니다.UIViewController
표시하려고 합니다.실제로 버튼 등을 직접 추가하지는 않습니다.UINavigationController
.
인터페이스 작성기에서 탐색 모음 단추를 추가하는 방법을 찾고 있는 사람들이 있을 수 있습니다.아래의 답변은 방법을 보여줍니다.
스토리보드에 탐색 컨트롤러 추가
View Controller를 선택한 다음 Xcode 메뉴에서 Editor > Embed In > Navigation Controller를 선택합니다.
또는 다음을 추가할 수 있습니다.UINavigationBar
개체 라이브러리에서 가져옵니다.
막대 단추 항목 추가
드래그 aUIBarButtonItem
개체 라이브러리에서 상단 탐색 모음으로 이동합니다.
다음과 같이 표시되어야 합니다.
특성 설정
항목을 두 번 눌러 텍스트를 "새로 고침"과 같은 항목으로 변경할 수 있지만, 사용할 수 있는 실제 새로 고침 아이콘이 있습니다.에 대한 속성 검사기를 선택하면 됩니다.UIBarButtonItem
시스템 항목에 대해 새로 고침을 선택합니다.
그러면 기본 새로 고침 아이콘이 표시됩니다.
IB 작업 추가
에서 드래그 제어UIBarButtonItem
추가하려면 View 컨트롤러에@IBAction
.
class ViewController: UIViewController {
@IBAction func refreshBarButtonItemTap(sender: UIBarButtonItem) {
print("How refreshing!")
}
}
바로 그겁니다.
"새로 고침"에 대한 기본 시스템 버튼이 있습니다.
- (void)viewDidLoad {
[super viewDidLoad];
UIBarButtonItem *refreshButton = [[[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh
target:self action:@selector(refreshClicked:)] autorelease];
self.navigationItem.rightBarButtonItem = refreshButton;
}
- (IBAction)refreshClicked:(id)sender {
}
사용할 수 있는 항목:
목표-C
UIBarButtonItem *rightSideOptionButton = [[UIBarButtonItem alloc] initWithTitle:@"Right" style:UIBarButtonItemStylePlain target:self action:@selector(rightSideOptionButtonClicked:)];
self.navigationItem.rightBarButtonItem = rightSideOptionButton;
스위프트
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];
}
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
시도해 보세요
self.navigationBar.topItem.rightBarButtonItem = anotherButton;
Swift의 솔루션은 다음과 같습니다(필요에 따라 옵션 설정).
var optionButton = UIBarButtonItem()
optionButton.title = "Settings"
//optionButton.action = something (put your action here)
self.navigationItem.rightBarButtonItem = optionButton
왜 당신들은 하위 클래스입니까?UINavigationController
단추만 추가하면 하위 분류할 필요가 없습니다.
를사여설로 합니다.UINavigationController
맨 위에 있는 다음 루트 보기 컨트롤러에서viewDidLoad:
method:합니다.
[[self navigationItem] setRightBarButtonItem:myBarButtonItem];
스위프트 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];
이거 먹어봐요.저한테는 효과가 있어요.
탐색 모음 및 오른쪽 버튼에 배경 이미지를 추가했습니다.
UIBarButtonItem *Savebtn=[[UIBarButtonItem alloc]initWithImage:[[UIImage
imageNamed:@"bt_save.png"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]
style:UIBarButtonItemStylePlain target:self action:@selector(SaveButtonClicked)];
self.navigationItem.rightBarButtonItem=Savebtn;
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];
}
의 barButtonItem을 .- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
방법.
이 Objective-C 코드를 복사하여 붙여넣기만 하면 됩니다.
- (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
}
이 문제는 뷰 컨트롤러를 삭제하거나 인터페이스 작성기(main.storyboard) 내에 새 뷰 컨트롤러를 추가하려고 할 때 발생할 수 있습니다.이 문제를 해결하려면 새 보기 컨트롤러에 "내비게이션 항목"을 추가해야 합니다.새 보기 컨트롤러 화면을 만들 때 "내비게이션 항목"에 자동으로 연결되지 않는 경우가 있습니다.
- 메인 스토리보드로 이동합니다.
- 새 보기 컨트롤러를 선택합니다.
- 문서 개요로 이동합니다.
- 컨트롤러 내용 보기를 확인합니다.
- 새 뷰 컨트롤러에 탐색 항목이 없는 경우 이전 뷰 컨트롤러에서 탐색 항목을 복사하여 새 뷰 컨트롤러에 붙여넣습니다.
- 프로젝트를 저장하고 정리합니다.
또한 다음을 사용하여 여러 버튼을 추가할 수 있습니다.rightBarButtonItems
-(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 : 탐색 기반 프로젝트인 경우 BaseView Controller를 만들 수 있습니다.다른 모든 보기는 이 기본 보기를 상속합니다.BaseView에서 오른쪽 버튼을 추가하거나 왼쪽 버튼 텍스트를 변경하는 일반적인 방법을 정의할 수 있습니다.
ex:
@인터페이스 기본 컨트롤러: UIViewController {}
- (비활성) setBackButtonCaption:(NSString *) Caption;
(void) set RightButtonCaption:(NSString *)caption selector:(SEL) 셀렉터;
@end // BaseView에 있습니다.m
(void) setBackButtonCaption:(NSString *)caption{
UIBarButtonItem *backButton =[[UIBarButtonItem alloc] init];
backButton.title= caption;
self.navigationItem.backBarButtonItem = backButton;
[backButton release];
- (비활성) 오른쪽 버튼 캡션 설정: (NSString *) 캡션 선택 슬롯: (SEL) 셀렉터 {
UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] init];
rightButton.title = caption;
rightButton.target= self;
[rightButton setAction:selector];
self.navigationItem.rightBarButtonItem= rightButton;
[rightButton release];
}
이제 모든 사용자 정의 보기에서 메소드를 호출하여 이 기본 보기를 구현합니다.
@interface LoginView : 기본 컨트롤러 {}
일부 메서드에서 기본 호출 메서드는 다음과 같습니다.
SEL sel= @selector(switchToForgot)PIN);
[슈퍼셋 오른쪽 버튼 캡션:@"PIN을 잊었습니다" 선택 ot:sel];
언급URL : https://stackoverflow.com/questions/1219779/how-to-add-a-right-button-to-a-uinavigationcontroller
'programing' 카테고리의 다른 글
무료 모드버스로 여러 클라이언트 호스팅 (0) | 2023.06.06 |
---|---|
디렉토리가 Ruby와 함께 있지 않은 경우 디렉토리 만들기 (0) | 2023.06.06 |
데이터 테이블: 정의되지 않은 속성 'mData'를 읽을 수 없습니다. (0) | 2023.06.06 |
진행 대화 상자와 배경 스레드가 활성화되었을 때 화면 방향 변경을 처리하는 방법은 무엇입니까? (0) | 2023.06.06 |
당신은 C에서 리눅스에서 논블로킹 콘솔 I/O를 어떻게 합니까? (0) | 2023.06.06 |