2011-11-11 2 views
1

appdel에서 만든 navcontroller가있는 앱이 있습니다. 푸시 된 각 VC에는 도구 모음을 설정하는 viewdidload에 코드 블록이 있습니다. 도구 모음은 항상 동일합니다. 한 번만이 코드를 작성하고 모든 VC에 넣지 않는 방법이 있습니까?UINavigationController 도구 모음 - 코드는 모든보기 컨트롤러가 아니라 한 번만 표시됩니까?

[self.navigationItem setHidesBackButton:YES]; 

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Home" style:UIBarButtonItemStyleBordered target:self action:@selector(backClicked)]; 

UIBarButtonItem *flexibleSpaceLeft = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 

UIBarButtonItem *storyBtnItem = [[UIBarButtonItem alloc]initWithTitle:@"Sto" style:UIBarButtonItemStyleBordered target:self action:@selector(toolbarControl:)]; 
storyBtnItem.tag = 1; 
UIBarButtonItem *renderBtnItem = [[UIBarButtonItem alloc]initWithTitle:@"Ren" style:UIBarButtonItemStyleBordered target:self action:@selector(toolbarControl:)]; 
renderBtnItem.tag = 2; 
UIBarButtonItem *amenBtnItem = [[UIBarButtonItem alloc]initWithTitle:@"Ame" style:UIBarButtonItemStyleBordered target:self action:@selector(toolbarControl:)]; 
amenBtnItem.tag = 3; 
UIBarButtonItem *availBtnItem = [[UIBarButtonItem alloc]initWithTitle:@"Availability" style:UIBarButtonItemStyleBordered target:self action:@selector(toolbarControl:)]; 
availBtnItem.tag = 4; 
UIBarButtonItem *eopBtnItem = [[UIBarButtonItem alloc]initWithTitle:@"Eq" style:UIBarButtonItemStyleBordered target:self action:@selector(toolbarControl:)]; 
eopBtnItem.tag = 5; 
UIBarButtonItem *stkBtnItem = [[UIBarButtonItem alloc]initWithTitle:@"St" style:UIBarButtonItemStyleBordered target:self action:@selector(toolbarControl:)]; 
stkBtnItem.tag = 6; 
UIBarButtonItem *movBtnItem = [[UIBarButtonItem alloc]initWithTitle:@"Fi" style:UIBarButtonItemStyleBordered target:self action:@selector(toolbarControl:)]; 
movBtnItem.tag = 7; 
NSArray *items = [NSArray arrayWithObjects:flexibleSpaceLeft, stoBtnItem, reBtnItem, ameBtnItem, avaBtnItem, eBtnItem, stBtnItem, mvBtnItem, nil]; 
[self setToolbarItems:items]; 
[self.navigationController.toolbar setTintColor:[UIColor colorWithRed:79.0/255.0 green:145.0/255.0 blue:205.0/255.0 alpha:1.0]]; 

답변

2

그냥 당신이 다음 뷰 컨트롤러를 밀어하는 방법 (vc이 추진되는 뷰 컨트롤러 인) vc.toolbarItems = self.toolbarItems을한다.

예 : 또한

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UIViewController *vc = [UIViewController new]; 
    vc.toolbarItems = self.toolbarItems 
    [self.navigationController pushViewController:vc animated:YES]; 
    [vc release]; // if not using ARC 
} 

, 당신은로드 할 뷰를 필요로하지 않는 탐색 항목과 도구 모음 항목을 설정하면 -viewDidLoad 방법으로이 작업을 수행 할 필요가 없습니다, 따라서에서 할 수 있습니다 init 또는 awakeFromNib 방법. -viewDidLoad에서이 작업을 수행하면 항목을 여러 번 설정할 가능성이 있습니다.

0

일반적으로 이런 종류의 일을 처리하는 방법은 기본보기 컨트롤러를 만드는 것이고 도구 모음을 설정하는 코드는 기본보기 컨트롤러에 있고 다른 모든보기 컨트롤러는이 기본 컨트롤러에서 상속됩니다.

0

ViewDidLoad에이 함수가있는 ViewController에 대한 추상 하위 클래스를 만들 수 있습니다. 그런 다음 한 곳에서 조정하십시오.

예를 들어, myMasterViewController라는보기 컨트롤러 클래스를 만듭니다. 그 안에 설정해야하는 것은 viewDidLoadMethod뿐입니다. 그런 다음 다른 컨트롤러에서 UIViewController 대신 myMasterViewController에서 상속합니다. 다른 VC에 [super viewDidLoad];이 있는지 확인하십시오.

관련 문제