第二天了,上了一天课,软件测试、数据挖掘、概率论,晚上了才有时间捣鼓捣鼓程序。

  今天只是简单的做了一点。觉得自己思考的写不出来,只能简单的写一个过程,不像第一次写这个,少了很多思考的。

  1.完善tabbar的消息提醒,自定义提醒小图标。使用KVO动态改变badge的显示值(代码:006),新浪的那个badge的图片需要拉伸,有一个自己写的一个UIIamge的分类(主要是根据从中心拉伸图片,会写在评论里)

  1. // 添加提醒数字按钮
  2. SVBadgeButton *badgeBtn = [[SVBadgeButton alloc] init];
  3. badgeBtn.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin;
  4. [self addSubview:badgeBtn];
  5. self.badgeBtn = badgeBtn;
  1. // 006
  2. // 设置item
  3. - (void)setItem:(UITabBarItem *)item
  4. {
  5. _item = item;
  6.  
  7. // KVO 监听属性改变
  8. [item addObserver:self forKeyPath:@"badgeValue" options: context:nil];
  9. [item addObserver:self forKeyPath:@"title" options: context:nil];
  10. [item addObserver:self forKeyPath:@"image" options: context:nil];
  11. [item addObserver:self forKeyPath:@"selectedImage" options: context:nil];
  12.  
  13. [self observeValueForKeyPath:nil ofObject:nil change:nil context:nil];
  14. }
  15.  
  16. - (void)dealloc
  17. {
  18. [self.item removeObserver:self forKeyPath:@"badgeValue"];
  19. [self.item removeObserver:self forKeyPath:@"title"];
  20. [self.item removeObserver:self forKeyPath:@"image"];
  21. [self.item removeObserver:self forKeyPath:@"selectedImage"];
  22. }
  23.  
  24. /**
  25. * 监听到某个对象的属性改变了,就会调用
  26. *
  27. * @param keyPath 属性名
  28. * @param object 哪个对象的属性被改变
  29. * @param change 属性发生的改变
  30. */
  31. - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
  32. {
  33. // 设置文字
  34. [self setTitle:self.item.title forState:UIControlStateSelected];
  35. [self setTitle:self.item.title forState:UIControlStateNormal];
  36.  
  37. // 设置图片
  38. [self setImage:self.item.image forState:UIControlStateNormal];
  39. [self setImage:self.item.selectedImage forState:UIControlStateSelected];
  40.  
  41. // 设置提醒数字
  42. self.badgeBtn.badgeValue = self.item.badgeValue;
  43.  
  44. // 设置提醒数字的位置
  45. CGFloat badgeY = ;
  46. CGFloat badgeX = self.frame.size.width - self.badgeBtn.frame.size.width - ;
  47. CGRect badgeF = self.badgeBtn.frame;
  48. badgeF.origin.x = badgeX;
  49. badgeF.origin.y = badgeY;
  50. self.badgeBtn.frame = badgeF;
  51. }

  2.完善nav导航条的细节(全局属性的设置):左上右上的的按钮,需要在各自的Vc中写自己的按钮,而整个nav的主题在nav里写就好(代码:007)。

  1. // 代码007
  2. // 第一次使用这个类就会调用
  3. + (void)initialize
  4. {
  5. // 设置导航栏主题
  6. [self setupNavBar];
  7. // 设置按钮主题
  8. [self setupNavBarItem];
  9. }
  10.  
  11. + (void)setupNavBar
  12. {
  13. // 取出当前的tabbar
  14. UINavigationBar *bar = [UINavigationBar appearance];
  15. // 设置标题属性
  16. NSMutableDictionary *textDic = [NSMutableDictionary dictionary];
  17. textDic[NSFontAttributeName] = [UIFont boldSystemFontOfSize:];
  18. textDic[NSForegroundColorAttributeName] = [UIColor blackColor];
  19.  
  20. [bar setTitleTextAttributes:textDic];
  21. }
  22. + (void)setupNavBarItem
  23. {
  24. UIBarButtonItem *item = [UIBarButtonItem appearance];
  25.  
  26. // 设置文字属性
  27. NSMutableDictionary *textAttrs = [NSMutableDictionary dictionary];
  28. textAttrs[NSFontAttributeName] = [UIFont boldSystemFontOfSize:];
  29. textAttrs[NSForegroundColorAttributeName] = [UIColor orangeColor];
  30. [item setTitleTextAttributes:textAttrs forState:UIControlStateNormal];
  31. [item setTitleTextAttributes:textAttrs forState:UIControlStateHighlighted];
  32. }

  3.首页控制器的中间标题需要自定义,在那放一个可以点击的按钮。对于左右的按钮,因为新浪对于navbaritem提供了图片,所有又为UIBarButtonItem写了分类。

  1. - (void)viewDidLoad {
  2. [super viewDidLoad];
  3. [self.tabBarController.tabBar.items[] setBadgeValue:@""];
  4. // 左边按钮
  5. self.navigationItem.leftBarButtonItem = [UIBarButtonItem itemWithIcon:@"navigationbar_friendsearch_os7" highIcon:@"navigationbar_friendsearch_highlighted_os7" target:self action:@selector(findFriend)];
  6.  
  7. // 右边按钮
  8. self.navigationItem.rightBarButtonItem = [UIBarButtonItem itemWithIcon:@"navigationbar_pop_os7" highIcon:@"navigationbar_pop_highlighted_os7" target:self action:@selector(pop)];
  9.  
  10. // 中间按钮
  11. SVTitleBtn *titleBtn = [SVTitleBtn titleButton];
  12. // 图标
  13. [titleBtn setImage:[UIImage imageNamed:@"navigationbar_arrow_down"] forState:UIControlStateNormal];
  14. // 文字
  15. [titleBtn setTitle:@"Sleen" forState:UIControlStateNormal];
  16. // 位置和尺寸
  17. titleBtn.frame = CGRectMake(, , , );
  18. // titleButton.tag = IWTitleButtonDownTag;
  19. [titleBtn addTarget:self action:@selector(titleClick:) forControlEvents:UIControlEventTouchUpInside];
  20. self.navigationItem.titleView = titleBtn;
  21. }
  22. - (void)titleClick:(SVTitleBtn *)titleBtn
  23. {
  24. if (titleBtn.tag == ) {
  25. [titleBtn setImage:[UIImage imageNamed:@"navigationbar_arrow_up"] forState:UIControlStateNormal];
  26. titleBtn.tag = -;
  27. } else {
  28. [titleBtn setImage:[UIImage imageNamed:@"navigationbar_arrow_down"] forState:UIControlStateNormal];
  29. titleBtn.tag = ;
  30. }
  31. }

  4.发现控制器的中间是一个搜索框,也要自己写这里就直接那之前写的那个了,觉得使用起来太简单了(代码:008)

  1. //
  2. - (void)viewDidLoad
  3. {
  4. [super viewDidLoad];
  5. // 初始化
  6. SLSearchBar *search = [SLSearchBar searchBar];
  7. // 设置位置
  8. search.frame = CGRectMake(, , , );
  9. // 添加搜索框
  10. self.navigationItem.titleView = search;
  11. }

iOS实践02的更多相关文章

  1. svn://59.46.115.123:13690/IOS/trunk/02.DevelopLib/04.Coding/uuridesharing

    svn://59.46.115.123:13690/IOS/trunk/02.DevelopLib/04.Coding/uuridesharing

  2. 使用Bootstrap 3开发响应式网站实践02,轮播

    本篇体验图片轮播.html部分为: <div class="carousel slide" id="myCarousel" > <!--Ind ...

  3. iOS设计模式(02):单例模式

    iOS设计模式(02):单例模式 singleton-design-pattern 什么是单例模式? 单例模式是一个类在系统中只有一个实例对象.通过全局的一个入口点对这个实例对象进行访问.在iOS开发 ...

  4. iOS实践03

    主要目标:版本新特性界面,新浪授权界面(登录界面)的处理 任务基本完成了,基本的框架也就到这了,接下来的应该是首页获取微博了. 1.版本新特性,可以单独作为一个model,写完之加入到项目中.我们新建 ...

  5. Istio技术与实践02:源码解析之Istio on Kubernetes 统一服务发现

    前言 文章Istio技术与实践01: 源码解析之Pilot多云平台服务发现机制结合Pilot的代码实现介绍了Istio的抽象服务模型和基于该模型的数据结构定义,了解到Istio上只是定义的服务发现的接 ...

  6. AJ学IOS(02)UI之按钮操作 点击变换 移动 放大缩小 旋转

    不多说,先上图片看效果,AJ分享,必须精品 这个小程序主要实现点击方向键可以让图标上下左右动还有放大缩小以及旋转的功能,点击图片会显示另一张图片. 点击变换 其实用到了按钮的两个状态,再State C ...

  7. MatrixOne从入门到实践02——源码编译

    MatrixOne从入门到实践--源码编译 ​ 在部署MatrixOne前,我们可能会比较纠结使用哪个版本合适,MatrixOne在github上有各个版本的Releases,包含源码包和适用于Lin ...

  8. iOS实践01

    去年放假之前大概完成了新浪微博项目,到现在也忘得差不多了,打算在重新写一遍.之前的一些笔记在新浪的博客SleenXiu,在这主要是把新浪微博以随笔的形式写在这,方便以后的复习. 先看看之前主要完成的几 ...

  9. iOS实践04

    第四天 微博数据展示:获取服务器数据,json数据的解析,MVC的使用,自定义cell高度的计算,一些分类的设计.已经是第四天了,虽然每天都有课程,但这个东西也基本完成了一大半吧,一些忘掉的知识也捡起 ...

随机推荐

  1. Oracle EBS-SQL (SYS-10):锁定表查询.sql

    /*死锁查询-1*/ SELECT o.object_name, l.session_id,l.process, l.locked_mode FROM v$locked_object l , dba_ ...

  2. Mysql 语句汇总(性能篇)

    查询mysql 哪些表正在被锁状态: show open TABLES where In_use > 0; show open table from XXX(数据库名);//查看数据库哪些表正在 ...

  3. 网易云课堂_C语言程序设计进阶_第四周:ACL图形库

    创建ACLLib程序 #include"acllib.h" #include<stdio.h> int Setup1() { initWindow(, );//初始化窗 ...

  4. 使用iscroll插件实现下拉刷新功能

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  5. 【leetcode系列】Valid Parentheses

    非常经典的问题,使用栈来解决,我这里自己实现了一个栈,当然也能够直接用java自带的Stack类. 自己实现的栈代码: import java.util.LinkedList; class Stack ...

  6. AIDL 发生异常的原因 Android java.lang.SecurityException: Binder invocation to an incorrect interface

    我建立了两个project.一个是activity 的 ,一个是service 的. 在进行两个project通信时,应该有以下几点注意: 1.在activity project中引入service ...

  7. javascript how sort() work

    Array.prototype.sort() 方法一般用来对数组中的元素进行排序,既可以对数字排序,也可以对字符串进行排序.如果没有指定比较函数,会根据数组中字符的Unicode编码来进行排序.这对于 ...

  8. 【android】两个按钮的宽度各占屏幕的一半

    <LinearLayout> <Button android:layout_height="wrap_content" android:layout_width= ...

  9. Sql Sever 字符串截取汉字

    最近需要在SQL的字符串中截取汉字,利用unicode函数判断字符的unicode编码,根据编码范围过滤掉非汉字字符. 写成了一个function /*@str 需要获取汉字的字符串*/ create ...

  10. 浏览器中输入Google.com然后按下回车键

    按下回车键,当然会产生操作系统的中断响应,产生一个WM_KEYDOWN消息,当然这些都不是计算机网络的东西,这里只讨论计算机网络相关的东西: 解析URL 浏览器通过URL能够知道下面的信息: Prot ...