UinavigationController에 오른쪽 버튼을 추가하는 방법은 무엇입니까?
-
10-07-2019 - |
문제
성공하지 못한 내비게이션 컨트롤러의 상단 막대에 새로 고침 버튼을 추가하려고합니다.
헤더는 다음과 같습니다.
@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 메뉴에서 선택하십시오. 편집기> 내비게이션 컨트롤러에 포함됩니다.
또는 a를 추가 할 수 있습니다 UINavigationBar
객체 라이브러리에서.
막대 버튼 항목을 추가하십시오
드래그 a UIBarButtonItem
객체 라이브러리에서 상단 탐색 표시 줄까지.
다음과 같아야합니다.
속성을 설정하십시오
"Item"을 두 번 클릭하여 텍스트를 "새로 고침"과 같은 것으로 변경할 수 있지만 실제 아이콘이 있습니다. 새로 고치다 사용할 수 있습니다. 속성 검사관을 선택하십시오 UIBarButtonItem
그리고 시스템 항목 선택하다 새로 고치다.
기본 새로 고침 아이콘이 제공됩니다.
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 내부에 "내비게이션 항목"을 추가해야합니다. 때로는 새 뷰 컨트롤러 화면을 생성하고 "탐색 항목"에 자동으로 연결되지 않습니다.
- Main.Storyboard로 이동하십시오.
- 새로운보기 컨트롤러를 선택하십시오.
- 문서 개요로 이동하십시오.
- 보기 컨트롤러 내용을 확인하십시오.
- New View Controller에 내비게이션 항목이없는 경우 이전보기 컨트롤러에서 내비게이션 항목을 복사하여 새보기 컨트롤러에 붙여 넣으십시오.
- 프로젝트를 저장하고 청소하십시오.
또한 여러 버튼을 사용하여 추가 할 수 있습니다 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];