仿写项目的时候,出现了一个Bug:点击右边的"编辑","编辑"变为"完成",左侧出现"全选","删除"等按钮,再点击"完成",本应该把左侧出现的按钮都隐藏掉,并把"完成"再次改为"编辑",但是左侧的按钮并没有隐藏掉.

  正确的需求应该如下图所示:

  

  出现Bug的效果图:

  有Bug的核心代码部分如下:

 //右侧按钮点击事件
- (void)rightClick:(UIBarButtonItem *)item{
if ([item.title isEqualToString:@"编辑"]) {
item.title = @"完成";
//左侧显示 返回 全选 全不选 删除
self.navigationItem.leftBarButtonItems = @[self.backItem,self.selectAllItem,self.unselectAllItem,self.deleteItem]; }else{
item.title = @"编辑";
//左侧只显示 返回
self.navigationItem.leftBarButtonItem = self.backItem; }
//刷新
[self.collectionView reloadData];
}

  一进入控制器就设置navigationItem的代码部分:

 - (void)setUpNav{
//设置左侧
self.navigationItem.leftBarButtonItem = self.backItem; //设置右侧
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"编辑" style:UIBarButtonItemStylePlain target:self action:@selector(rightClick:)]; //标题
self.title = @"收藏"; }

  将所有的leftBarButtonItem改为leftBarButtonItems,即使只有一个元素,也写作Items,bug就不见了,代码如下图(为了突出重点,选择截图做展示)

  个人总结:在设置UINavigationBar过程中,只要一个地方需要使用left/rightBarButtonItems,那么就把所有的地方都写成left/rightBarButtonItems.

  个人推理(非官方,如果有错欢迎指正),因为left/rightBarButtonItems和left/rightBarButtonItem是navigationItem的两个独立的属性,并且如果遇到二者都有值的时候,数组(left/rightBarButtonItems)的优先级可能要比left/rightBarButtonItem的优先级高一些.编译器会优先选择left/rightBarButtonItems中的元素来布局.

  查看苹果官方头文件UINavigationBar.h,相关语句红框圈出:

  The older single properties (leftBarButtonItem and rightBarButtonItem) now refer to the first item in the respective array of items.

  翻译(不专业,但大体意思应该没错):之前的单数属性(leftBarButtonItem 和 rightBarButtonItem)现在指各自的items数组中的首个元素.

  NOTE: You'll achieve the best results if you use either the singular properties or the plural properties consistently and don't try to mix them.

  翻译概述(不专业,但大体意思应该没错):NOTE:想要得到最好的结果,最好要么一直用单数属性要么一直用复数属性,不要试图把他们混起来用.

(原创,转载请注明出处.有错误的地方欢迎指正.)

leftBarbuttonItem/rightBarButtonItem和leftBarbuttonItems/rightBarButtonItems相关问题的更多相关文章

  1. UINavigationController 返回手势与 leftBarButtonItem

    UINavigationController 返回手势与 leftBarButtonItem UINavigationController 自带从屏幕左侧边缘向右滑动的返回手势,可以通过这个手势实现 ...

  2. UINavigationController的使用

    1.UINavigationController使用流程 UINavigationController为导航控制器,在iOS里经常用到. 我们看看它的如何使用: 下面的图显示了导航控制器的流程.最左侧 ...

  3. IOS开发UI篇-NavigationController的基本使用

    一.简介 一个iOS的app很少只由一个控制器组成,除非这个app极其简单 当app中有多个控制器的时候,我们就需要对这些控制器进行管理 有多个view时,可以用一个大的view去管理1个或者多个小v ...

  4. iOS学习—— UINavigationController的返回按钮与侧滑返回手势的研究

    侧滑返回手势是从iOS7开始增加的一个返回操作,经历了两年时间估计iPhone用户大部分都已经忽略了屏幕左上角那个碍眼的back按钮了.之前在网上搜过有关侧滑手势的技术博客,发现大多比较散乱,甚至有很 ...

  5. 01-QQ 3-最终重构版 Demo示例程序源代码

      源代码下载链接:01-QQ 3.zip292.5 KB // QQAppDelegate.h Map // //  QQAppDelegate.h //  01-QQ // //  Created ...

  6. NAVagationController

    UINavigationController为导航控制器,在iOS里经常用到. 1.UINavigationController的结构组成 UINavigationController有Navigat ...

  7. iOS 底层框架的浅析

    1.简介 IOS是由苹果公司为iPhone.iPod touch和iPad等设备开发的操作系统. 2.知识点 iPhone OS(现在叫iOS)是iPhone, iPod touch 和 iPad 设 ...

  8. IOS计划 分析

    1.基本介绍 IOS苹果公司iPhone.iPod touch和iPad操作系统和其他设备的发展. 2.知识点 1.IOS系统 iPhone OS(现在所谓的iOS)这是iPhone, iPod to ...

  9. iOS底层框架浅析

    1.简介 IOS是由苹果公司为iPhone.iPod touch和iPad等设备开发的操作系统. 2.知识点 iPhone OS(现在叫iOS)是iPhone, iPod touch 和 iPad 设 ...

随机推荐

  1. PHP 模拟 HTTP 基本认证(Basic Authentication)

    当某个页面需要认证才能进行访问时,接到请求后服务器端会在响应头中发送一个 WWW-Authenticate 首部(用来标识认证安全域),语法为 WWW-Authenticate:Basic relam ...

  2. WIN7 如何将BAT文件附加到任务栏

    1.桌面有个 a.bat 文件2.将a.bat 改名为 a.exe3.将 a.exe 拉到任务栏4.修改桌面的 a.exe 回 a.bat5.打开C:\Users\Administrator\AppD ...

  3. CACHE COHERENCE AND THE MESI PROTOCOL

    COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION In contemporary multi ...

  4. 改善你的jQuery的25个步骤 千倍级效率提升

    1. 从Google Code加载jQueryGoogle Code上已经托管了多种JavaScript类库,从Google Code上加载jQuery比直接从你的服务器加载更有优势.它节省了你服务器 ...

  5. Glide 魔法般的自定义扩展

    使用过Glide的朋友都明白,简单的用法就是: Glide.with(context) .load("http://inthecheesefactory.com/uploads/source ...

  6. Web测试的常用测试用例与知识

    1. Web测试中关于登录的测试 2. 搜索功能测试用例设计 3. 翻页功能测试用例 4. 输入框的测试 5. Web测试的常用的检查点 6. 用户及权限管理功能常规测试方法 7. Web测试之兼容性 ...

  7. JDK1.8导致发送邮件失败

    问题:本地JDK1.6测试可以发送邮件,但是linux上jdk1.8发送邮件失败.报错: Sending the email to the following server failed : smtp ...

  8. PDO的一些操作

    一.实例化一个PDO对象 //实例化一个PDO对象//1,设置数据源相关参数$dbms = 'mysql';$host = '127.0.0.1';$port = '3306';$dbname = ' ...

  9. Leetcode: Concatenated Words

    Given a list of words, please write a program that returns all concatenated words in the given list ...

  10. 完美解决 nginx No input file specified.

    一次开发中遇到了这个问题:No input file specified nginx版本1.8 找遍网络都是说 fastcgi_param SCRIPT_FILENAME $document_root ...