iOS实践02

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

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

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

// 添加提醒数字按钮
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:0 context:nil];
 9     [item addObserver:self forKeyPath:@"title" options:0 context:nil];
10     [item addObserver:self forKeyPath:@"image" options:0 context:nil];
11     [item addObserver:self forKeyPath:@"selectedImage" options:0 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 = 5;
46     CGFloat badgeX = self.frame.size.width - self.badgeBtn.frame.size.width - 10;
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:19];
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:14];
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[0] setBadgeValue:@"99"];
 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(0, 0, 80, 40);
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 == 0 ) {
25         [titleBtn setImage:[UIImage imageNamed:@"navigationbar_arrow_up"] forState:UIControlStateNormal];
26         titleBtn.tag = -1;
27     } else {
28         [titleBtn setImage:[UIImage imageNamed:@"navigationbar_arrow_down"] forState:UIControlStateNormal];
29         titleBtn.tag = 0;
30     }
31 }

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

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

iOS实践02的相关文章

iOS.TextKit.02.文字图片混合排版

1.案例如图 2.代码 TextKit02ViewController.h #import <UIKit/UIKit.h> @interface TextKit02ViewController : UIViewController @property (nonatomic,strong) IBOutlet UITextView *textView; @property (nonatomic,weak) IBOutlet UIImageView *imageView; // 文本可以排版的区域

iOS.UIKit.02.UIButton_UILabel

图01图02 图03 一.案例介绍:点击"图01"中的Button,Label文本变为"Hello World",如"图02". 二.案例步骤: 1.选择Single View Application新建项目,取名cq.39.UIButton_UILabel,如"图03". iOS.UIKit.02.UIButton_UILabel,布布扣,bubuko.com

iOS基础 02 StoryBoard 故事板文件

iOS基础 02 StoryBoard 故事板文件 目录: 1. 故事板的导航特点 2. 故事板中的Scene和Segue 3. 本文最后 在上篇HelloWorld工程中有一个Main.storyboard文件,它被称为“故事板”(storyboard)文件. 它可以描述应用中有哪些界面,界面有哪些控件以及它们的事件. 此外,故事板还能描述界面之间是如何导航的. 1. 故事板的导航特点 在包含多个视图控制器的情况下,采用故事板管理比较方便,而且故事板还可以描述界面之间的导航关系. 下面我们举例

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

本篇体验图片轮播.html部分为: <div class="carousel slide" id="myCarousel" > <!--Indicators--> <ol class="carousel-indicators"> <li class="active" data-slide-to="0" data-target="#myCarousel&qu

iOS实践03

主要目标:版本新特性界面,新浪授权界面(登录界面)的处理 任务基本完成了,基本的框架也就到这了,接下来的应该是首页获取微博了. 1.版本新特性,可以单独作为一个model,写完之加入到项目中.我们新建一个mvc方式的分组Newpart,主要应用的就是那个scrollview,有点类似于广告轮播,这个换成手动的切换图片. 2.在appdelegate中将window的根控制器换成newpartController,完成效果后在处理他们之间的逻辑. 3.添加UIScrollView来实现滚动,添加图

视频iOS之02第一个OC的类

OC是一门面向对象的语言,因此它也有类.对象.静态\动态方法.成员变量的概念.这讲就来创建第一个OC的类. 第一个类的源码: 1 /* 2 人 3 类名:Person 4 属性(成员变量\实例变量):体重.年龄 5 行为(方法):走路.吃 6 */ 7 8 #import <Foundation/Foundation.h> 9 10 //1.类的声明 11 @interface Person : NSObject 12 { 13 @public 14 int age; 15 double we

ASP.NET5实践02:EF7迁移-连接字符串读取-增删改查-关系映射

1.概述 本章重点本应该先从实体关系映射介绍,就像做网页设计先从整体布局开始一样. 最好先基本搞明白实体关系映射到数据表关联关系之后,再研究实体属性或表字段细节. EF7.x和EF6.x区别是很大的.EF7为了迎合NoSql,与以前单一处理关系型数据库映射有一些不同的理念. 在讲这之前,我们先学习EF7迁移和数据库字符串配置读写. 这算准备工作,虽然有些啰嗦,但这是写这篇博客的思路.既然是实践系列,就边体验便写博客! 2.手动迁移 实体类: public class Role { public

iOS代理02

代理阶段性小结 @required ->必须实现的方法 @optional  ->可选的实现方法-不强求实现-如果实现了能得到特殊的效果,如果不实现,也不影响程序的正确运行 能够增加控件的灵活度 1,遵守协议,预先定义好方法,不实践,具体的实现工作由代理负责 <控件的名字+DataSource> 定义的与数据有关的方法 <控件的名字+Delegate> 定义的与事件有关的方法,通常用来监听事件的 2,代理方法 1)方法名以控件名称开头(没有类前缀)->方便程序员编

IOS学习02简单动画

IOS学习第二天,今天做一个简单的动画的小程序! 程序截图如下: 1 这个程序,当点击屏幕左下方4个方向按键的时候,上面的图片就会跟着自动上下左右移动. 2 当点击屏幕右边变大和变小按键时候,上面的图片就会跟着变大和变小. 二 功能就说到这里,下面开始界面和代码说明. 2.1 首先还是先创建项目和设计界面,当然还要把相对应的图片导入项目images.xcassets下.截图如下: 2.2 界面图片和方向键,在这里我都是用Button做的,当然,用别的也可以. 2.3 界面上所以可以点击的按键,我