iOS开发 - 第05篇 - 项目 - 02 - 导航栏

1、Debug下NSLog

2、Xcode图片拉伸

直接选中图片,在右侧属性中设置即可,避免代码拉伸。

3、添加搜索框

在发现控制器的导航栏中添加一个搜索框。

3.1 通过UISearchBar

系统自带的UISearchBar并不好用,不能改变其高度。

3.2 通过UITextField

3.3 自定义搜索框

注:由于上述创建搜索框控件在其他地方也有可能用得上,因此最好将其抽取出来,自定义一个搜索框控件

4、弹出下拉菜单

4.1 界面

4.2 设置导航栏的titleView

注1:设置UIButton左边文字,右边图片,可以通过设置imageEdgeInsets和titleEdgeInsets来实现,也可以通过自定义UIButton来实现(设置title和image的frame)

注2:若使用imageEdgeInsets和titleEdgeInsets来实现,则需要计算文字的长度

注3:上述自定义控件也可以封装起来,方便其他地方使用

4.3 弹出

1> 对popover_background图片进行垂直拉伸

注:如果图片的某个方向上不规则,比如有突起,那么这个方向就不能拉伸

2> 将弹出的View添加到UIWindow上(而且是最上面的UIWindow),不要添加到UIView上,否则会跟随UIView滑动

3> 添加蒙版,在下拉菜单弹出的时候,后面的界面不能点击

注:下拉菜单可能用在其他地方或者其他项目,需要对其进行封装

5、简单封装下拉菜单

注:自定义一个继承自UIView的下拉菜单控件,而且封装一个遮盖即可,即将下来菜单封装到遮盖里面,遮盖作为一个自定义控件。

5.1 自定义HWDropdownMenu

封装:先写外面,外面需要这么使用,再具体实现里面。

注:可在initWithFrame中设置self.backgroundColor= [UIColor clearColor];测试是否添加上去。

5.2 具体实现

1>懒加载一个UIImageView,用于背景黑色图片,并且以后需要往背景添加其他控件

2> 设置下拉菜单内容 --- 注意和背景图片大小适配

3> 自定义测试UITableViewController,将其放到下拉菜单里面,实现效果如下:

6、完善下拉菜单的封装

6.1 设置弹出下拉菜单的位置

上述showFrom方法中,并没有设置下拉菜单位置,需要根据点击那个控件的位置,在其下方弹出下拉菜单。

注:其中位置的确定需要使用坐标系转换!!!

在UIView的分类方法中封装centerX和centerY方法

6.2 取消弹出菜单

在HWDropdownMenu的touchesBegan方法中[selfdismiss];即可

6.3 自动调整下拉菜单的宽度

上述做法是:下拉菜单的高度设置为自动调整,宽度设置为一定,最好改为宽度也有外面来设置,根据外面传进来的控件宽度,设置里面下拉菜单的宽度

1> 删除懒加载containerView的217宽度

2> 设置Xcode图片为拉伸模式(默认平铺)

3> 设置setContent方法修改

7、自定义tabBar

7.1 界面

注:UITabBarButton属于系统稀有,外界表面上不能改变其位置和尺寸!!只能自定义tabBar,重写layoutSubViews方法,重新排布位置!!!

7.2 自定义WBTabBar

1>自定义WBTabBar,继承自UITabBar,添加加号按钮

2> 系统私有的UITabBarButton系统私有,可以通过字符串类名判断是否是该类

3> 换掉WBTabBarController中的TabBar

注:系统自带的TabBar属于只读属性,可以通过KVC来换!

7.3 点击加号Modal控制器

注1:Modal控制器需要用控制器来调用,自定义TabBar需要将按钮点击事件传递出去,使用代理(让WBTabBarController称为TabBar的代理)

注2:TabBar本来就有delegate属性

注3:自定义TabBar协议需要尊重系统TabBar协议

注4:点击加号通知代理Modal控制器

8、KVC补充 --- 重要

注1:利用KVC可以随意修改一个对象的属性或者成员变量,不管其是否是私有属性!!!

注2:forKey和forKeyPath区别(同理取值)

注3:取值

9、首页导航栏titleView箭头切换

给HWDropdownMenu定义代理,首页控制器遵循代理,让下拉菜单销毁的时候通知代理切换图片

在HWDropdownMenu的show和dismiss方法中通知代理

注:涉及两张图片之间的切换,可以使用UIButton的selected属性!

时间: 2024-08-03 20:37:43

iOS开发 - 第05篇 - 项目 - 02 - 导航栏的相关文章

iOS开发 - 第05篇 - 项目 - 01 - 搭建框架

实现:仿新浪微博 1.项目配置 1> 取消横竖屏 2> 设置图标和启动图片 3> 删除MainStoryboard,全部代码创建 2.添加TabBarController 2.1 创建窗口 1>在didFinishLaunchingWithOptions方法中,创建窗口,设置根控制器,显示窗口 2> 添加TabBarController的子控制器 3>抽取重复代码 注:上述方法限制每次创建的都是UIViewController,实际使用中,需要设置不同的控制器作为Tab

iOS开发 - 第05篇 - 项目 - 04 - OAuth授权 & 首页

1.存储帐号信息 1.1 基本实现 由于一旦授权成功,新浪返回的accessToken是同一个值(针对同一个第三方应用,同一个账号),为避免每次都重新登录,应该讲accessToken存储起来. 实现:先检测沙盒里面是否存在accessToken,若无,则意味从来没有登陆过,加载登录界面,一旦成功登录,就将获得的accessToken存进沙盒,下次进来就不需要再进行登录,直接从沙盒中取出accessToken,进入首页,获取用户数据. 1>在发送请求,成功获取accessToken方法后,将返回

iOS开发 - 第05篇 - 项目 - 11 - const & git & 项目重构

1.发微博键盘最近标签页完善 问题: 1>表情出现重复 2>其他标签页转换到最近标签也没有及时出现最新使用表情 1.1 表情实时刷新 方法一:切换到最近标签页,刷新最新使用表情 注:需要在listView中表情数组的setter方法中先移除之前的控件,并在最后[selfsetNeedsLayout]; 方法二:上述方法只能在其他标签页切换到最近标签页的时候刷新表情,若在最近页需要点击表情按钮立即刷新,需要监听表情按钮点击的通知 1.2 表情重复问题 在表情工具类,存储表情的时候增加判断,删除重

iOS开发 - 第05篇 - 项目 - 05 - 首页

1.下拉刷新 1.1 进入首页自动刷新 1.2 显示最新微博数量 注:弹出的UILabel应该添加到导航控制器的View上,而不应该添加到tableView上,否则会更随tableView一起滚动!!! 在发送请求成功后,调用下面方法(注意动画): 2.添加上拉刷新控件 1> 自定义HWLoadMoreFooter(XIB) 1. UILabel利用autoLayout填充View 2.添加转圈控件,勾选动画 2>提供类方法加载XIB控件 3> 添加到tableView的tableFoo

iOS开发 - 第05篇 - 项目 - 10 - 发微博

1.点击表情 1.1 表情放大界面 1.2 实现思路 1>监听表情按钮点击 2>同一时间只能显示一个放大镜,创建一个即可,不用重复创建 3>放大镜应该作为一个整体HWEmotionPopView,而且比较简单,用XIB来实现即可,提供类方法 4>在HWEmotionPageView中懒加载HWEmotionPopView 注1:HWEmotionPopView添加位置问题,若添加在HWEmotionPageView上面,则会被上面工具台挡住,因此,应该添加到最上面的窗口UIWind

iOS开发 - 第05篇 - 项目 - 12 - 图文混排

1.首页微博文字处理 对于之前微博项目中首页:微博文字中的用户名.话题.链接等文字需要高亮显示,表情字符串需要显示对应表情. 思路: 1>之前微博中的文字使用NSString,要达到不同文字的高亮显示,需要使用NSAttributedString 2>微博模型中增加一个属性,代表属性字符串 /** string     微博信息内容*/ @property(nonatomic, copy) NSString *text; /** string     微博信息内容 -- 带有属性的(特殊文字会

iOS开发 - 第05篇 - 项目 - 03 - 版本新特性 & OAuth授权

1.版本新特性 1.1 界面 程序第一次启动的时候会弹出新特性界面,之后启动不会出现. 1.2 实现思路 1> 新建一个HWNewfeatureViewController(继承自UIViewController) 2> 先将其设置为整个程序的根控制器,用于演示 3> 使用UIScrollView 4>添加UIPageControl 5> 设置UIScrollView代理,监听滚动,设置UIPageControl 2.控制器切换 2.1 一个View中显示其他控制器的View

iOS开发-仿大众点评iPad侧边导航栏

昨天其实已经写了一篇侧边栏的文章,不过感觉还不是很清晰,这篇文章算是补充吧,iPad上看了大众点评的侧边栏,基本上百分之九十类似,具体效果可参考下图: 对比昨天主要做了两个修改,一个是图片和文字的显示位置,另外一个就是关于底部的定位和设置的位置在横竖屏时显示的问题,侧边栏的区域是是自己控制的,需要注意一下横竖屏的时候设置一下autoresizingMask,底部图标定位的时候也是一样设置. 导航栏上每个按钮提取出了一个父类GPDockItem,头文件中的代码: // // GPDockItem.

iOS开发笔记13:顶部标签式导航栏及下拉分类菜单

当内容及分类较多时,往往采用顶部标签式导航栏,例如网易新闻客户端的顶部分类导航,最近刚好有这样的应用场景,参考网络上一些demo,实现了这种导航效果,记录一些要点. 效果图(由于视频转GIF掉帧,滑动和下拉动画显得比较生硬,刚发现quickTime可以直接录制手机视频,推荐一下,很方便) 1.顶部标签式导航栏 (1)实现思路 其实就是在上下两个UIScrollView上做文章,实现联动选择切换的效果. ①顶部标签导航栏topCategoryListScrollView加载显示分类数据,下方con