子类化 UIToolbar 并覆盖 drawRect: - UIBarButtonItems 不显示
Posted
技术标签:
【中文标题】子类化 UIToolbar 并覆盖 drawRect: - UIBarButtonItems 不显示【英文标题】:Subclassing UIToolbar and overriding drawRect: - UIBarButtonItems NOT displaying 【发布时间】:2013-04-25 15:43:02 【问题描述】:上下文
我正在使用“initWithNavigationBarClass”方法来初始化带有自定义工具栏的 UINavigationController,这是我分配初始化 UINavigationController 的行
navigationController = [[UINavigationController alloc] initWithNavigationBarClass:nil toolbarClass:[QuestionToolbar class]];
是类,“QuestionToolbar”,我继承UIToolbar并覆盖drawrect,这里是drawRect方法:
- (void)drawRect:(CGRect)rect
[super drawRect:rect];
UIImage *backgroundImage = [UIImage imageNamed:@"44px_background_red.png"];
[backgroundImage drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
这是我尝试添加 UIBarButtonItems 的 viewController 中的相关代码
UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIBarButtonItem *beginItem = [[UIBarButtonItem alloc] initWithTitle:@"Begin Quiz" style:UIBarButtonItemStylePlain target:self action:@selector(beginAction:)];
[beginItem setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: [UIColor whiteColor], UITextAttributeTextColor,nil] forState:UIControlStateNormal];
NSArray *items = [NSArray arrayWithObjects:spacer, beginItem, spacer, nil];
[self.navigationController.toolbar setItems:items];
[self.navigationController setToolbarHidden:NO];
问题
如何将 UIBarButtonItems 添加到此工具栏,因为当我尝试添加它们时它们不显示?
我认为这与我的重写 drawRect 有关
【问题讨论】:
我想我明白了,我使用的是这段代码:[self.navigationController.toolbar setItems:items] 没有用。但是,如果我使用 self.toolbarItems = items 它就可以了。不知道为什么? 【参考方案1】:我尝试使用自定义 UIToolbar,但问题不是来自 -(void)drawRect:(CGCrect)rect
。
我不知道您是否尝试在 UIToolbar 上添加按钮,但您应该尝试将它们添加到 UIViewController 类的 -(void)viewDidAppear
方法中。通过这种方式,它对我有用。
【讨论】:
感谢您的回答 danypata,请参阅我之前的评论,我改为使用 self.toolbarItems 而不是 self.navigationController.toolbar setItems:item 并修复了它。知道为什么吗? 所以基本上Apple Docs声明导航控制器obtains its current set of items from the toolbarItems property of the active view controller
。所以基本上设置 toolbarItems 的正确方法是通过 UIViewController.toolbarItems 属性。
@我不相信这是正确的,请参阅:***.com/questions/16228275/…以上是关于子类化 UIToolbar 并覆盖 drawRect: - UIBarButtonItems 不显示的主要内容,如果未能解决你的问题,请参考以下文章
Swift 中的自定义 UI 元素:子类化 CALayer 并覆盖 drawInContext 导致像素化绘图
子类化并覆盖 PySide2 小部件方法;我在哪里可以找到参考资料?
子类化 UIApplication 以覆盖 sendEvent 导致崩溃
如果 drawRect: 被覆盖,子类化的 UIView 显示黑色背景