2013-06-05 5 views
2

사용자 지정 NavigationBar을 사용하여 UINavigationController을 만들려고합니다.사용자 지정 NavigationBar가있는 UINavigationController

UINavigationBar에서 상속받은 클래스 (myNavBar)를 만들었습니다.

나는 전화를 내이 같은 navigationController :

UINavigationController *navControl = [[UINavigationController alloc] initWithNavigationBarClass:[myNavBar class] toolbarClass:[UIToolbar class]]; 
[navControl pushViewController:myVewController animated:NO]; 

하지만이 오류를 얻을 : 내 코드에서 잘못 무엇

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Cannot call setItems:animated: directly on a UINavigationBar managed by a controller.' 

합니다.

UPDATE

다음

myNavigationBar 클래스입니다 :

#import <UIKit/UIKit.h> 

@interface myNavBar : UINavigationBar 

-(void)initNavBarButtons:(UIViewController*)sender; 

@end 


--------------------------------------------------- 


#import "myNavBar.h" 

@implementation myNavBar 
{ 
    UIButton *menuButton; 
    UIButton *searchButton; 
} 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Do any additional setup 
    } 
    return self; 
} 


-(void)initNavBarButtons:(UIViewController*)sender 
{ 
    [menuButton addTarget:sender action:@selector(revealMenu:) forControlEvents:UIControlEventTouchUpInside]; 
    [searchButton addTarget:sender action:@selector(revealSearch:) forControlEvents:UIControlEventTouchUpInside]; 
} 


- (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize 
{ 
    //UIGraphicsBeginImageContext(newSize); 
    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0); 
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)]; 
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return newImage; 
} 

-(id)init 
{ self = [super init]; 
    return self; 
} 


// Only override drawRect: if you perform custom drawing. 
// An empty implementation adversely affects performance during animation. 
- (void)drawRect:(CGRect)rect 
{ 
    [self setFrame:rect]; 

    //[self setBarStyle:UIBarStyleBlack]; 

    menuButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    menuButton.frame = CGRectMake(0, 0, 25, 22); 
    [menuButton setCenter:CGPointMake(25, self.center.y)]; 
    [menuButton setBackgroundImage:[UIImage imageNamed:@"menuButton.png"] forState:UIControlStateNormal]; 
    [self setHidden:NO]; 
    [self addSubview:menuButton]; 

    UIImageView *zblogo = [[UIImageView alloc] initWithImage:[self imageWithImage:[UIImage imageNamed:@"minilogo.png"] scaledToSize:CGSizeMake(200, 25)]]; 
    UINavigationItem *navI = [[UINavigationItem alloc] init]; 
    [self setItems:[NSArray arrayWithObject:navI]]; 

    [self.topItem setTitleView:zblogo]; 

    searchButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
    searchButton.frame = CGRectMake(0, 0, 20, 20); 
    [searchButton setCenter:CGPointMake(self.bounds.size.width - 25, self.center.y)]; 
    [searchButton setBackgroundImage:[UIImage imageNamed:@"boutonRecherche.png"] forState:UIControlStateNormal]; 

    [self addSubview:searchButton]; 
} 


@end 

어쩌면 내가 여기서 뭔가 잘못하고 있어요?

UPDATE

이제 내있는 navigationController 잘 인스턴스화,하지만 난 여전히 문제 갖는 내가 제거되어 내 바의 초기화에서 수행 한

UINavigationController *navController = [[UINavigationController alloc] initWithNavigationBarClass:[myNavBar class] toolbarClass:nil]; 
[navController setViewControllers:@[vc] animated:NO] 

모든 것을 작성하는 경우 을, 및

UINavigationController *navController = [[UINavigationController alloc] initWithNavigationBarClass:[myNavBar class] toolbarClass:nil]; 
[navController pushViewController:vc animated:NO] 

내 내비게이션 바는 "뒤로 버튼"으로 표시, 난 참조 내 그것을 클릭하여 사용자 정의.

이 항목을 읽은 적이 있습니다. Why does using setViewControllers remove everything from the UINavigationController's nav bar?하지만 실제로 도움이되지는 않습니다.

처음에는 내비게이션 막대를 그대로 유지할 수 있습니까?

+0

은'myVewController' 안에 또 다른'UINavigationBar'이 있습니까? – Sulthan

+0

아니요 ... – zbMax

+2

'drawRect'에서 아무 것도하지 마세요! 보기 추가 또는 프레임 설정은'drawRect'에 있어서는 안됩니다'init'에 넣으십시오! – Sulthan

답변

0

nil을 두 번째 매개 변수 (도구 모음 중 하나)에 입력하여 기본값을 사용할 수 있습니까? 워드 프로세서

:

당신이 를 사용하거나 표준 UIToolbar 클래스를 사용하는 nil을 지정하려면 사용자 정의 UIToolbar 서브 클래스를 지정합니다.

업데이트, 내가 문제가이 방향으로 더 간다 생각 확인한 후, 확인하시기 바랍니다 해당 링크 : 당신은 그냥 이미지를 넣을 경우

How to add Button in UINavigationController

Adding BarButtons to a UINavigationBar after presenting a modal view controller

+0

아니요, 문제가 해결되지 않습니다. – zbMax

+0

나는 당신과 같은 빈 프로젝트를하려고하는데 그것은 나를 위해 일하고있다. 그래서 나는 그 문제가 다른 장소에 있다고 생각하게 만든다. 정보의 일부가 여기에 누락되었습니다. 빈 프로젝트를 사용해보십시오. – Emilio

0

내비게이션 막대를 누른 다음 시도해보십시오 ..AppDelegate에의 didFinishLaunching 방법에

if ([self.navCtrl.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)]) { 
     UIImage *image = [UIImage imageNamed:@"YourImage.png"]; 
     [self.navCtrligationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault]; 
    } 
+0

아니요, 저는 이미지를 포함하지 않고 있습니다. 슬라이딩 메뉴로 앱을 만들고 있습니다. ECSlidingViewController 사용하고 있습니다. 그래서 스토리 보드 ID (및 복원 ID)를 사용하여 컨트롤러를 호출하여 스토리 보드로 앱을 빌드했습니다. 그들 각각은 navigationBAr를 맨 위에 표시합니다. 메뉴는 TableView이고, didSelectRowAtIndexPath 메소드는 표시 할 컨트롤러를 호출합니다. 그리고 특히 내가 보여주고 싶은 것은 푸시 전환 테이블입니다. – zbMax

관련 문제