문제

성공하지 못한 내비게이션 컨트롤러의 상단 막대에 새로 고침 버튼을 추가하려고합니다.

헤더는 다음과 같습니다.

@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에서 해보십시오. 일반적으로 UiviewController가 설립되면 그 시점까지 할 수있는 모든 것을 연기해야합니다. 여전히 표시되기까지는 꽤 오래 걸릴 수 있습니다. 일찍 작업을 수행하고 메모리를 연결하는 데 아무런 의미가 없습니다.

- (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 컨트롤러의 내비게이 템에 버튼을 추가하여 푸시 할 것입니다. 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.

인터페이스 빌더에 네비게이션 막대 버튼을 추가하는 방법을 찾고있는 일부 사람들 (나와 같은)이 여기에 올 수 있습니다. 아래 답변은 그것을 수행하는 방법을 보여줍니다.

스토리 보드에 탐색 컨트롤러를 추가하십시오

뷰 컨트롤러를 선택한 다음 Xcode 메뉴에서 선택하십시오. 편집기> 내비게이션 컨트롤러에 포함됩니다.

enter image description here

또는 a를 추가 할 수 있습니다 UINavigationBar 객체 라이브러리에서.

막대 버튼 항목을 추가하십시오

드래그 a UIBarButtonItem 객체 라이브러리에서 상단 탐색 표시 줄까지.

enter image description here

다음과 같아야합니다.

enter image description here

속성을 설정하십시오

"Item"을 두 번 클릭하여 텍스트를 "새로 고침"과 같은 것으로 변경할 수 있지만 실제 아이콘이 있습니다. 새로 고치다 사용할 수 있습니다. 속성 검사관을 선택하십시오 UIBarButtonItem 그리고 시스템 항목 선택하다 새로 고치다.

enter image description here

기본 새로 고침 아이콘이 제공됩니다.

enter image description here

IB 동작을 추가하십시오

제어 드래그 UIBarButtonItem view 컨트롤러에 an을 추가하십시오 @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

다음은 Swift의 솔루션입니다 (필요에 따라 옵션 설정) :

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

왜 서브 클래스입니까? UINavigationController? 버튼을 추가하는 것만 큼 서브 클래스가 필요하지 않습니다.

a로 계층 구조를 설정하십시오 UINavigationController 상단에, 루트보기 컨트롤러의 viewDidLoad: 방법 : 버튼을 설정하고 호출하여 내비게이션 항목에 첨부하십시오.

[[self navigationItem] setRightBarButtonItem:myBarButtonItem];

당신은 시도 할 수 있습니다

self.navigationBar.topItem.rightBarButtonItem = anotherButton;

스위프트 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;

이 코드를 사용하여 제목을 사용하여 오른쪽 버튼 NavigationBar에 사용하고 오른쪽 버튼을 클릭 한 후 메소드를 호출하십시오.

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

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) 내부에 새 뷰 컨트롤러를 추가하려고 시도하면 발생할 수 있습니다. 이 문제를 해결하려면 New View Controller 내부에 "내비게이션 항목"을 추가해야합니다. 때로는 새 뷰 컨트롤러 화면을 생성하고 "탐색 항목"에 자동으로 연결되지 않습니다.

  1. Main.Storyboard로 이동하십시오.
  2. 새로운보기 컨트롤러를 선택하십시오.
  3. 문서 개요로 이동하십시오.
  4. 보기 컨트롤러 내용을 확인하십시오.
  5. New View Controller에 내비게이션 항목이없는 경우 이전보기 컨트롤러에서 내비게이션 항목을 복사하여 새보기 컨트롤러에 붙여 넣으십시오.
  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 : 탐색 기반 프로젝트 인 경우 u는 baseviewcontroller를 만들 수 있습니다. 다른 모든 견해는이 BaseView를 상속합니다. BaseView에서 u는 오른쪽 버튼을 추가하거나 왼쪽 버튼 텍스트를 변경하기 위해 일반 메소드를 정의 할 수 있습니다.

전:

@Interface BaseController : uiviewController {

} - (void) setbackbuttoncaption : (nsstring *) 캡션;

(void) setrightbuttoncaption : (nsstring *) 캡션 selectot : (sel) 선택기;

@end // baseview.m

(void) setbackbuttoncaption : (nsstring *) 캡션 {

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

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

} - (void) setrightbuttoncaption : (nsstring *) caption selectot : (sel) 선택기 {

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

rightButton.target= self;

[rightButton setAction:selector];

self.navigationItem.rightBarButtonItem= rightButton;

[rightButton release];

}

그리고 이제 모든 사용자 정의보기 에서이 기본보기를 구현하십시오.

@Interface loginView : BaseController {

일부 메소드에서 콜베이스 메소드에서 :

sel = @selector (switchtoforgotpin);

Super SetrightButtonCaption :@"잊어 버린 PIN"SELECTOT : SEL];

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top