如何在navigationbar右边加入两个按钮
1个回答
展开全部
如何完全自定义NavigationBar
NavigationBar是很常用的一个元素,所以常常需要进行自定义操作,而一种比较直观的方式就是,先定义一个类NavigationBar继承自 UINavigationBar,而这个NavigationBar的内部内容则是比较复杂的了,里面添加我们需要的所有的navigationBar 的样式,而且使得这些view的尺寸都是整个NavigationBar的尺寸,然后再进行内部view的构建就可以了,而需要进行切换的时候就进行这些view之间的显示和隐藏的切换就可以了,最好使用一些动画,前面的文中有提供动画流畅的保证方式,现在新建一个HomeNavigationController 继承自 UINavigationController,并且在这个类的实现中这样操作
@implementation HomeNavigationController
-(instancetype)init
{
self = [super initWithNavigationBarClass:[Navigationbar class] toolbarClass:nil];
if (self) {
self.delegate = self;
}
return self;
}
这样的话就将HomeNavigationController的导航栏的样式进行了确定了。而为了能进行子控制器的导航栏的正确显示,最好在HomeNavigationController中声明一个
@protocol SecretPresentableViewController <NSObject>
@optional
- (void)willPresentWithNavigationBar:(Navigationbar *)navigationBar;
@end
而那些想要拥有这个导航栏的自控制器只需要实现协议就可以了,而NavigationBar中的多个view的左右按钮以及中间都可以完全的自定义了,而事件 的传递则使用block的方式,这里提供其中一个自定义view的h定义方式
@interface HomeNavigationView : UIView
@property(nonatomic, copy) void (^didTapComposeBlock)(void);
@property(nonatomic, copy) void (^didTapNotificationsBlock)(void);
@property(nonatomic, copy) void (^didTapChatBlock)(void);
@property(nonatomic, copy) void (^didTapScrollToTopBlock)(void);
@property(nonatomic, copy) void (^didTapNewThemeTopBlock)(void);
@property (nonatomic, strong) UILabel* titleLabel;
@property (nonatomic, strong) UIButton *tipsNewThemeBtn;
@property (nonatomic, strong) UIButton *unreadLeftV;
@end
而在m文件中只要对按钮添加监听就可以了,例子是
#pragma private
-(void)left:(id)sender
{
if (_didTapNotificationsBlock) _didTapNotificationsBlock();
}
在拥有navigationBar 的控制器中对具体的block进行处理
navigationBar.homeNavigationView.didTapNotificationsBlock = ^{
[self left:nil];
};
而里面使用的这个left:方法则正是这个控制器中的具体的处理方法(push,modal,或者按钮的消失,lable的隐藏等等的点击相应等等),这样的话就实现了自定义bar的同时而且实现了bar和控制器之间的无缝衔接。更加方便的进行自定义的操作,但同时也可以完全实现系统提供bar的所有功能等等,而这个具体的实现过程很有可能就是apple自己内部的实现方式,因为apple很推荐我们使用block而这种bar和viewcontrol的传递消息的方式感觉这是最优秀的了。
NavigationBar是很常用的一个元素,所以常常需要进行自定义操作,而一种比较直观的方式就是,先定义一个类NavigationBar继承自 UINavigationBar,而这个NavigationBar的内部内容则是比较复杂的了,里面添加我们需要的所有的navigationBar 的样式,而且使得这些view的尺寸都是整个NavigationBar的尺寸,然后再进行内部view的构建就可以了,而需要进行切换的时候就进行这些view之间的显示和隐藏的切换就可以了,最好使用一些动画,前面的文中有提供动画流畅的保证方式,现在新建一个HomeNavigationController 继承自 UINavigationController,并且在这个类的实现中这样操作
@implementation HomeNavigationController
-(instancetype)init
{
self = [super initWithNavigationBarClass:[Navigationbar class] toolbarClass:nil];
if (self) {
self.delegate = self;
}
return self;
}
这样的话就将HomeNavigationController的导航栏的样式进行了确定了。而为了能进行子控制器的导航栏的正确显示,最好在HomeNavigationController中声明一个
@protocol SecretPresentableViewController <NSObject>
@optional
- (void)willPresentWithNavigationBar:(Navigationbar *)navigationBar;
@end
而那些想要拥有这个导航栏的自控制器只需要实现协议就可以了,而NavigationBar中的多个view的左右按钮以及中间都可以完全的自定义了,而事件 的传递则使用block的方式,这里提供其中一个自定义view的h定义方式
@interface HomeNavigationView : UIView
@property(nonatomic, copy) void (^didTapComposeBlock)(void);
@property(nonatomic, copy) void (^didTapNotificationsBlock)(void);
@property(nonatomic, copy) void (^didTapChatBlock)(void);
@property(nonatomic, copy) void (^didTapScrollToTopBlock)(void);
@property(nonatomic, copy) void (^didTapNewThemeTopBlock)(void);
@property (nonatomic, strong) UILabel* titleLabel;
@property (nonatomic, strong) UIButton *tipsNewThemeBtn;
@property (nonatomic, strong) UIButton *unreadLeftV;
@end
而在m文件中只要对按钮添加监听就可以了,例子是
#pragma private
-(void)left:(id)sender
{
if (_didTapNotificationsBlock) _didTapNotificationsBlock();
}
在拥有navigationBar 的控制器中对具体的block进行处理
navigationBar.homeNavigationView.didTapNotificationsBlock = ^{
[self left:nil];
};
而里面使用的这个left:方法则正是这个控制器中的具体的处理方法(push,modal,或者按钮的消失,lable的隐藏等等的点击相应等等),这样的话就实现了自定义bar的同时而且实现了bar和控制器之间的无缝衔接。更加方便的进行自定义的操作,但同时也可以完全实现系统提供bar的所有功能等等,而这个具体的实现过程很有可能就是apple自己内部的实现方式,因为apple很推荐我们使用block而这种bar和viewcontrol的传递消息的方式感觉这是最优秀的了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询