사용자 지정 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?하지만 실제로 도움이되지는 않습니다.
처음에는 내비게이션 막대를 그대로 유지할 수 있습니까?
은'myVewController' 안에 또 다른'UINavigationBar'이 있습니까? – Sulthan
아니요 ... – zbMax
'drawRect'에서 아무 것도하지 마세요! 보기 추가 또는 프레임 설정은'drawRect'에 있어서는 안됩니다'init'에 넣으십시오! – Sulthan