programing

UI 내비게이션 컨트롤러에 오른쪽 버튼을 추가하는 방법은 무엇입니까?

bestprogram 2023. 6. 6. 10:23

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) 내에 새 뷰 컨트롤러를 추가하려고 할 때 발생할 수 있습니다.이 문제를 해결하려면 새 보기 컨트롤러에 "내비게이션 항목"을 추가해야 합니다.새 보기 컨트롤러 화면을 만들 때 "내비게이션 항목"에 자동으로 연결되지 않는 경우가 있습니다.

  1. 메인 스토리보드로 이동합니다.
  2. 새 보기 컨트롤러를 선택합니다.
  3. 문서 개요로 이동합니다.
  4. 컨트롤러 내용 보기를 확인합니다.
  5. 새 뷰 컨트롤러에 탐색 항목이 없는 경우 이전 뷰 컨트롤러에서 탐색 항목을 복사하여 새 뷰 컨트롤러에 붙여넣습니다.
  6. 프로젝트를 저장하고 정리합니다.

또한 다음을 사용하여 여러 버튼을 추가할 수 있습니다.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