iOS 自定义UINavigationBar

本文详细介绍了如何在iOS应用中自定义导航栏的过程,包括创建自定义导航栏类、设置导航栏样式及尺寸、实现按钮点击事件处理以及通过代理模式完成界面间的跳转。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      

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");
}

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

 

转载于:https://my.oschina.net/sgcllr/blog/780470

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值