Swift - 修改导航栏“返回”按钮文字,图标

2015-11-27 09:13发布:hangge浏览:4037

 
项目中常常会使用 UINavigationController 对各个页面进行导航,导航栏左侧的返回按钮默认标题文字是上级页面的title。

但如果上级页面的标题很长,那么这个返回按钮字很多就会很丑:
      

当文字极其长时返回文字就会变成“back”:

      
一,要修改“返回按钮”的文字,有如下两种方式:

1,在父页面中设置
将navigationItem.backBarButtonItem设为自定义的UIBarButtonItem
这种方法所有的子界面返回时都变成了我们定义的文字,同时文字前面任然保留返回箭头。

1
2
let item = UIBarButtonItem(title: "返回", style: .Plain, target: self, action: nil)
self.navigationItem.backBarButtonItem = item;

或者也可以直接把文字设为空字符串,这样就只有一个箭头了。

1
2
let item = UIBarButtonItem(title: "", style: .Plain, target: self, action: nil)
self.navigationItem.backBarButtonItem = item;

2,在子页面中设置
将navigationItem.leftBarButtonItem为自定义的UIBarButtonItem
这种方式可以给各个子页面返回按钮单独设置不同的文字,但文字前面是没有小箭头的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import UIKit
 
class DetailViewControllerUIViewController {
 
    override func viewDidLoad() {
        super.viewDidLoad()
         
        let leftBarBtn = UIBarButtonItem(title: "返回", style: .Plain, target: self,
            action: "backToPrevious")
        self.navigationItem.leftBarButtonItem = leftBarBtn
    }
     
    //返回按钮点击响应
    func backToPrevious(){
        self.navigationController?.popViewControllerAnimated(true)
    }
 
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}
 

二,修改“返回按钮”图标

从上面最后一个例子可以看到,在子页面修改返回按钮的话只有文字没有图片。如果想要使用自定义图片,或者图片文字都需要的话可以进行如下操作:

1,如果只需要图片,不需要文字
比如我们想要用左侧这个图片(back@2x.png)作为返回图标
               
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import UIKit
 
class DetailViewControllerUIViewController {
     
    override func viewDidLoad() {
        super.viewDidLoad()
         
        let leftBarBtn = UIBarButtonItem(title: "", style: .Plain, target: self,
            action: "backToPrevious")
        leftBarBtn.image = UIImage(named: "back")
         
        //用于消除左边空隙,要不然按钮顶不到最前面
        let spacer = UIBarButtonItem(barButtonSystemItem: .FixedSpace, target: nil,
            action: nil)
        spacer.width = -10;
         
        self.navigationItem.leftBarButtonItems = [spacer, leftBarBtn]
    }
     
    //返回按钮点击响应
    func backToPrevious(){
        self.navigationController?.popViewControllerAnimated(true)
    }
     
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

2,既需要图片也需要文字

这个时候就要通过创建UIButton来实现了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import UIKit
 
class DetailViewControllerUIViewController {
     
    override func viewDidLoad() {
         
        let button =   UIButton(type: .System)
        button.frame = CGRectMake(0, 0, 65, 30)
        button.setImage(UIImage(named:"back"), forState: .Normal)
        button.setTitle("返回", forState: .Normal)
        button.addTarget(self, action: "backToPrevious", forControlEvents: .TouchUpInside)
         
        let leftBarBtn = UIBarButtonItem(customView: button)
         
        //用于消除左边空隙,要不然按钮顶不到最前面
        let spacer = UIBarButtonItem(barButtonSystemItem: .FixedSpace, target: nil,
            action: nil)
        spacer.width = -10;
         
        self.navigationItem.leftBarButtonItems = [spacer,leftBarBtn]
    }
     
    //返回按钮点击响应
    func backToPrevious(){
        self.navigationController?.popViewControllerAnimated(true)
    }
     
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

三,自定义leftBarButtonItems导致左边缘滑动返回失效问题解决
通常使用 navigationController 跳转到另一页面时,除了可以点击左上角的返回按钮,还可以通过在屏幕左侧向右滑动来返回到上一层。但如果像上面样例一样,自定义了 self.navigationItem.leftBarButtonItems 后会发现,滑动返回(swipe back)失效了。

原文出自:www.hangge.com  转载请保留原文链接:http://www.hangge.com/blog/cache/detail_957.html

Swift - 修改导航栏“返回”按钮文字,图标的更多相关文章

  1. Swift - 修改导航栏“返回”按钮文字和图标 /手势冲突解决/响应范围

    iOS11之前 修改导航栏“返回”按钮文字,图标 https://blog.csdn.net/u012701023/article/details/50264265 iOS11 完美解决导航栏按钮偏移 ...

  2. ios 修改导航栏返回按钮的图片

    修改导航栏返回按钮的图片 方法1: [UINavigationBar appearance].backIndicatorTransitionMaskImage = [UIImage imageName ...

  3. Swift - 重写导航栏返回按钮

    // 重写导航栏返回按钮方法 func configBackBtn() -> Void { // 返回按钮 let backButton = UIButton(type: .custom) // ...

  4. iOS 设置导航栏 返回按钮文字隐藏

    //隐藏返回按钮文字 [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60) f ...

  5. ios 修改导航条返回按钮

    ios 修改导航条返回按钮 方式一:使用系统的:可以更改系统的文字:以及通过设置导航条的颜色来达到预期的效果 UIBarButtonItem *backBtns = [[UIBarButtonItem ...

  6. IOS 改变导航栏返回按钮的标题

    IOS 改变导航栏返回按钮的标题   下午又找到了一个新的方法 这个方法不错 暂时没有发现异常的地方. 新写的App中需要使用UINavigationController对各个页面进行导航,但由于第一 ...

  7. iOS7 修改导航系统默认返回按钮文字及颜色

    //iOS7 修改系统默认返回按钮文字及颜色 UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithTitle:@"返" ...

  8. 转载 iOS拦截导航栏返回按钮事件的正确方式

    原文链接:http://www.jianshu.com/p/25fd027916fa 当我们使用了系统的导航栏时,默认点击返回按钮是 pop 回上一个界面.但是在有时候,我们需要在点击导航栏的返回按钮 ...

  9. iOS拦截导航栏返回按钮事件的正确方式

    当我们使用了系统的导航栏时,默认点击返回按钮是 pop 回上一个界面.但是在有时候,我们需要在点击导航栏的返回按钮时不一定要 pop 回上一界面,比如一个视频播放界面,进入横屏后,默认点击返回按钮仍然 ...

随机推荐

  1. 进击的Python【第十一章】:消息队列介绍、RabbitMQ&Redis的重点介绍与简单应用

    消息队列介绍.RabbitMQ.Redis 一.什么是消息队列 这个概念我们百度Google能查到一大堆文章,所以我就通俗的讲下消息队列的基本思路. 还记得原来写过Queue的文章,不管是线程queu ...

  2. Sequence POJ - 2442

    Sequence POJ - 2442 口胡一个结论:就是前i行产生的最小的n个和,一定可以在"前i-1行产生的最小n个和,每一个加上这一行的任意一个数,产生的n2个数"中找到.( ...

  3. DB2:在缓冲池 "1" 中当前没有任何页面可用。. SQLCODE=-1218, SQLSTATE=57011, DRIVER=3.61.75

    服务器端DB2数据库最近频繁报错: 在缓冲池 , SQLSTATE=, DRIVER= 试验发现简单的查询SQL执行没有问题,复杂的SQL就会报上述错误. 百度发现是因为数据库bufferpool太小 ...

  4. Java中的流(3)字符流-Reader和Writer

    java中提供了处理以16位的Unicode码表示的字符流的类,即以Reader和Writer 为基类派生出的一系列类.  1.Reader和Writer  这两个类是抽象类,只是提供了一系列用于字符 ...

  5. B/S和C/S示意图

    B/S C/S

  6. Java实现求二叉树的路径和

    题: 解: 这道题考的是如何找出一个二叉树里所有的序列. 我的思路是先从根节点开始遍历,找出所有的子节点,因为每个子节点只有一个父节点,再根据每个子节点向上遍历找出所有的序列,再判断序列的总和. 这样 ...

  7. web+ admin template,spa管理应用后台,easyui后台正式发布

    演示地址:http://admintemplate.webplus.org.cn/ v1.0 (2016/7/27) 扁平化风格 全屏支持 后台管理不使用iframe,全ajax开发 权限管理 商品管 ...

  8. 把List<Map<String,Object>>转成Map<String,Object>

    Map<String, Object> parmMap = new HashMap<String, Object>(); //定义一个用于存储强转后的Map List<M ...

  9. Hadoop YARN学习之核心概念(2)

    Hadoop YARN学习之核心概念(2) 1. Hadoop 2.X YARN引入的新服务 1.1 新的ResourceManager纯碎作为资源调度器,是集群资源的唯一仲裁者: 1.2 用户应用程 ...

  10. iOS循环引用

    iOS循环引用 当前类的闭包/Block属性,用到了当前类,就会造成循环引用 此闭包/Block应该是当前类的属性,我们经常对Block进行copy,copy到堆中,以便后用. 单方向引用是不会产生循 ...