首页 > 移动平台 > 详细

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

时间:2016-08-10 14:26:03      阅读:881      评论:0      收藏:0      [点我收藏+]

1、Debug下NSLog


技术分享


2、Xcode图片拉伸


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


技术分享


3、添加搜索框


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


技术分享


3.1 通过UISearchBar


技术分享


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


3.2 通过UITextField


技术分享


3.3 自定义搜索框


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


技术分享


技术分享


4、弹出下拉菜单


4.1 界面


技术分享


4.2 设置导航栏的titleView


技术分享


1:设置UIButton左边文字,右边图片,可以通过设置imageEdgeInsetstitleEdgeInsets来实现,也可以通过自定义UIButton来实现(设置titleimageframe)

2:若使用imageEdgeInsetstitleEdgeInsets来实现,则需要计算文字的长度

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控制器


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

2TabBar本来就有delegate属性


技术分享


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


技术分享


技术分享


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


技术分享


8、KVC补充 --- 重要


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

2forKeyforKeyPath区别(同理取值)


技术分享


3:取值


技术分享


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


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

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


技术分享


技术分享


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


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

原文:http://blog.csdn.net/nsryan/article/details/51971530

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!