gpt4 book ai didi

ios - 带有自定义NavigationBar的UINavigationController

转载 作者:行者123 更新时间:2023-12-01 17:09:21 25 4
gpt4 key购买 nike

我正在尝试使用自定义的UINavigationController创建一个NavigationBar

我创建了一个类(myNavBar),该类继承自UINavigationBar

我这样称呼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.'

我的代码有什么问题。

更新

这是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

也许我在这里做错了吗?

更新

现在,我的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]

我的navigationBar出现一个“后退按钮”,单击我可以看到我的自定义设置。

我已经读过这个主题: Why does using setViewControllers remove everything from the UINavigationController's nav bar?,但对我没有帮助。

我如何保留最初设置的navigationBar?

最佳答案

是否可能必须将 nil 放入第二个参数(工具栏为一个)才能使用默认值?

从文档:

指定要使用的自定义UIToolbar子类,或指定nil 以使用标准UIToolbar类。

更新,检查后我认为问题更多地朝这个方向发展,请检查以下链接:

How to add Button in UINavigationController

Adding BarButtons to a UINavigationBar after presenting a modal view controller

关于ios - 带有自定义NavigationBar的UINavigationController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16940111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com