文档章节

iOS 自定义UINavigationBar

JoshSone
 JoshSone
发布于 2016/11/03 13:30
字数 763
阅读 360
收藏 0

      

UI要求不高时,我们用官方的导航栏就足够用了,但是如果想创建一个更多样化,拥有更多功能的导航栏就需要自己创建了。

准备工作:

在StoryBoard中

①删除主视图(这时启动的小箭头也消失了)

②拖入一个Nav Controller连接MyNAV类

③设置从此视图开始启动

接下来,开始自定义导航栏

1.创建继承自UINavigationController的子类

2.创建继承自UIView的子类,并生成Xib文件

UIView无法直接生成Xib文件 小菊花+N 找到Empty

注意:方法名要与UIView文件名一致

将Xib文件的类与UIView相连接

拖进来一个UIView 将其SIZE设置为自定义FreeForm,这时就可以自行修改视图的大小了。

我这里将其宽高改为320*64,左右各拖了一个button,中间是一个label

将其中的两个button连接到MyNavBarView.h中,将其点击事件添加到MyNavBarView.m中

MyNavBarView.h
@property (weak, nonatomic) IBOutlet UIButton *btn_back;
@property (weak, nonatomic) IBOutlet UIButton *btn_edit;
MyNavBarView.m
- (IBAction)ClickBack:(id)sender {
}
- (IBAction)ClickEdit:(id)sender {
}

3.在MyNAV.h文件中,将类MyNavBarVie当做其属性

@property(nonatomic,strong)MyNavBarView*MyNv;

4.在MyNAV.m文件

①隐藏系统生成的导航栏

②添加自定义的导航栏

//隐藏系统生成的导航栏
    [self setNavigationBarHidden:YES];
//添加自定义的导航栏
    self.MyNv=[[[NSBundle mainBundle]loadNibNamed:@"MyNavBarView" owner:nil options:nil]
lastObject];
//设置导航栏的位置
    self.MyNv.frame=CGRectMake(0, 0, 320, 64);
//添加到self.view
    [self.view addSubview:self.MyNv];

这样就成功的生成了一个有自定义导航栏的NAV

这时两个按钮还没有对应的响应方法,我们想通过点击返回键回到上一层页面(当然了,这里它没有上一层页面),通过点击编辑进入到其他页面。简而言之,也就是说我们想通过MyNavBarView中的按键来完成整个可视界面的跳转,那么这时就需要用到"代理",来完成它本身无法实现的功能。

代理一共六步。

准备工作:

①创建继承自UITableViewController的文件

②将StoryBoard里的TableViewController和创建的文件连接

开始设置代理:

MyNavBarView.h文件中

1.声明要代理的方法

@protocol MyNavBarViewDelegate <NSObject>
-(void)ClickBack;
-(void)ClickEdit;
@end

2.把它当做自己的属性

@property(weak,nonatomic)id<MyNavBarViewDelegate>delegate;

MyNavBarView.m文件中

3.判断它是否存在、是否响应,并且实现这个方法

- (IBAction)ClickBack:(id)sender {
    if (_delegate&&[_delegate respondsToSelector:@selector(ClickBack)]) {
        [_delegate ClickBack];
    }
}
- (IBAction)ClickEdit:(id)sender {
    if (_delegate&&[_delegate respondsToSelector:@selector(ClickEdit)]) {
        [_delegate ClickEdit];
    }
}

4.引入头文件(因为MyNavBarView是MyNAV的属性所以直接引入MyNAV.h即可),使用代理方法

#import "MyNAV.h"
@interface TableViewController ()<MyNavBarViewDelegate>

5.

( (MyNAV*)self.navigationController).MyNv.delegate=self;
//由于直接调用的navigationController是系统自己生成的,我们要用强转将其变成MyNAV类型

6.实现代理方法

//由于我这里没有设置其他界面,用两个输出语句代替
-(void)ClickBack{
    NSLog(@"Back");
}
-(void)ClickEdit{
    NSLog(@"Edit");
}

 以上就是自定义导航栏的设置方法

 

© 著作权归作者所有

JoshSone
粉丝 7
博文 76
码字总数 32794
作品 0
长春
iOS工程师
私信 提问
使用 Interface Builder 兼容 iOS6 和iOS7

当你在更新你的App到iOS 7的平台时遇到最大的挑战之一就是确保不要遗忘那些还在使用iOS 6平台的用户,在此我们提供一些建议使你的App应用在iOS 6和iOS 7上同时保留视觉吸引力和技术功能. 此图...

isaced
2014/01/15
13.3K
12
iOS开发UINavigation系列三——工具栏UIToolBar

iOS开发UINavigation系列三——工具栏UIToolBar iOS中除了UINavinationBar之外,还有工具栏UIToolBar可以供我们使用,工具栏和导航栏十分类似,只是功能更加简单,工具栏中也有UIBarButtonIt...

珲少
2015/11/09
0
0
iOS开发UINavigation系列一——导航栏UINavigtionBar

iOS开发UINavigation系列一——导航栏UINavigtionBar 一、导航栏的使用 在iOS开发中,我们通常会使用导航控制器,导航控制器中封装了一个UINavigationBar,实际上,我们也可以在不使用导航控...

珲少
2015/11/08
0
1
关于iOS用IB操作UINavigationBar的问题?

在iOS开发中,UINavigationBar导航栏的用法一般是UINavigationController来创建,这样可以用push操作来切换子级页面,但如果用IB操作呢? 我在window上拖拽了一个UINavigationBar控件,设置了...

xoHome
2012/06/20
1K
2
利用 UIAppearance 协议自定义控件外观

文章开头先援引一下Mattt Thompson大神在UIApearance里的一句话吧: Users?will?pay?a?premium?for?good-looking?software. 就如同大多数人喜欢看帅哥美女一样,一款App能不能被接受,长得怎...

安宇夕
2015/11/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

硬件配置

https://akkadia.org/drepper/futex.pdf sudo lshw -businfo[sudo] lambda 的密码: Bus info Device Class Description======================================......

MtrS
今天
2
0
springmvc的return “success”源码解读

qqqq

architect刘源源
今天
4
0
Java程序员五面阿里分享 逆袭成功 太不容易了!

前言 拿到阿里实习offer,经历了5次面试,其中4轮技术面,1轮HR面试。在这里分享一下自己的面试经验和学习心得。希望能够帮助更多的小伙伴。 我本科毕业于中南大学信管专业,真正开始学习Jav...

别打我会飞
昨天
4
0
Android Camera模块解析之视频录制

《Android Camera架构》 《Android Camera进程间通信类总结》 《Android Camera模块解析之拍照》 《Android Camera模块解析之视频录制》 《Android Camera原理之CameraDeviceCallbacks回调模...

天王盖地虎626
昨天
2
0
手把手教你使用issue作为博客评论系统

自从上周在阮一峰的 每周分享第 60 期 看到了可以将 GitHub 的 issue 当作评论系统,插入第三方网页的 JS 库——utterances。我就对此“魂牵梦绕”。个人博客使用的是VuePress。 TLDR (不多废...

jump--jump
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部