`
dcj3sjt126com
  • 浏览: 1872600 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

IOS整理笔记

    博客分类:
  • IOS
 
阅读更多

10月26号整理

复制代码
1.获得项目中info.plist文件的内容
1> [NSBundle mainBundle].infoDictionary
2> 版本号在info.plist中的key:kCFBundleVersionKey

2.自定义控制器的view
重写loadView方法(不需要调用[super loadView])

3.控制器view的高度和状态栏的关系
创建控制器的view时,系统会检测状态栏是否显示
* 如果有状态栏,那么控制器view的高度是460(iPhone5中是548)
* 如果没有状态栏,那么控制器view的高度是480(iPhone5中是568)

4.[UIScreen mainScreen].applicationFrame的取值
以3.5inch为例(320x4801> 没有状态栏,applicationFrame的值{{0, 0}, {320, 480}}
2> 有状态栏,applicationFrame的值{{0, 20}, {320, 460}}

5.按钮的状态
UIControlStateNormal       普通(默认的状态)
UIControlStateHighlighted  高亮(用户长按的时候)
UIControlStateDisabled     失效(通过代码控制:enabled属性)
UIControlStateSelected     选中(通过代码控制:selected属性)

6.错误调试技巧
1> 一个控件无法显示出来的可能原因
* 没有宽高(宽高为0)
* 位置不对
* hidden=YES
* 没有被addSubview到屏幕上

2> 一个UIScrollView无法滚动
* contentSize没有值
* 不能接收到触摸事件

3> 一个控件无法跟用户交互(无法接收事件)的可能原因
* (父控件的)userInteractionEnabled = NO;
* (父控件的)hidden = YES
* (父控件的)alpha <= 0.01
* (父控件的)背景是clearColor

7.按钮的设置
// 高亮状态下不更改图片的颜色
self.adjustsImageWhenHighlighted = NO;
// 是否选中状态
self.selected = YES;
// 是否可用状态
self.enabled = YES;
复制代码

10月27号整理

复制代码
一、按钮的设置
0.设置背景图片
[btn setBackgroundImage:image forState:UIControlStateNormal];

1.设置内部UIImageView的图片
[btn setImage:image forState:UIControlStateNormal];
// 不能写成btn.imageView.image = image;

2.设置内部UILabel的文字
[btn setTitle:@"43" forState:UIControlStateNormal];
// 不能写成btn.titleLabel.text = @"43";

3.调整内部ImageView的frame
- (CGRect)imageRectForContentRect:(CGRect)contentRect

4.调整内部UILabel的frame
- (CGRect)titleRectForContentRect:(CGRect)contentRect

5.覆盖父类在highlighted时的所有操作
- (void)setHighlighted:(BOOL)highlighted { }

6.文字居中
self.titleLabel.textAlignment = NSTextAlignmentCenter;

7.文字大小
self.titleLabel.font = [UIFont systemFontOfSize:12];

8.图片的内容模式
self.imageView.contentMode = UIViewContentModeCenter;

二、添加子控制器
- (void)addChildViewController:
* 会将子控制器添加到childViewControllers,并且子控制器是有顺序的
* 目的就是持有子控制器,不让子控制器销毁,保证主控制器在,子控制器就在

三、让一个控制器拥有导航栏的最快方法:包装一层导航控制器
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:controller];

四、UIBarButtonItem
1> 创建一个带有文字的item
[[UIBarButtonItem alloc] initWithTitle:@"设置" style:UIBarButtonItemStyleBordered target:nil action:nil]

2> 创建一个包装了自定义View的item
- (id)initWithCustomView:(UIView *)customView

五、设置导航栏UINavigationBar主题
// 1.appearance方法返回一个导航栏的外观对象
// 修改了这个外观对象,相当于修改了整个项目中的外观
UINavigationBar *bar = [UINavigationBar appearance];

// 2.设置导航栏的背景图片
[bar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];

// 3.设置导航栏文字的主题
[bar setTitleTextAttributes:@{
  UITextAttributeTextColor : [UIColor blackColor],
  UITextAttributeTextShadowOffset : [NSValue valueWithUIOffset:UIOffsetZero]
 }];

六、设置导航按钮UIBarButtonItem主题
// 1.修改所有UIBarButtonItem的外观
UIBarButtonItem *barItem = [UIBarButtonItem appearance];
// 2.修改item的背景图片
[barItem setBackgroundImage:image1 forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[barItem setBackgroundImage:image2 forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];
// 3.修改item上面的文字样式
NSDictionary *dict = @{
    UITextAttributeTextColor : [UIColor darkGrayColor],
    UITextAttributeTextShadowOffset : [NSValue valueWithUIOffset:UIOffsetZero]
};
[barItem setTitleTextAttributes:dict forState:UIControlStateNormal];
[barItem setTitleTextAttributes:dict forState:UIControlStateHighlighted];

七、设置状态栏样式
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleBlackOpaque;
复制代码

10月29号整理

复制代码
一、Cell的设置
1.设置cell的背景view和选中时的背景view
UIImageView *bg = [[UIImageView alloc] init];
bg.image = [UIImage imageNamed:@"abc.png"];
cell.backgroundView = bg;

UIImageView *selectedBg = [[UIImageView alloc] init];
selectedBg.image = [UIImage imageNamed:@"cde.png"];
cell.selectedBackgroundView = selectedBg;

2.设置cell最右边的指示器(比如箭头\文本标签)
cell.accessoryView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"common_icon_arrow.png"]];

二、tableView的设置
1.设置table头部和底部的view
// 底部(宽度固定是320)
tableView.tableFooterView = footer;
// 头部(宽度固定是320)
tableView.tableHeaderView = header;

2.设置每一组头部和底部的高度
tableView.sectionHeaderHeight = 5;
tableView.sectionFooterHeight = 0;

3.设置tableView的背景
// 当tableview的样式为group时,如果想更换背景,必须清除默认条纹状的backgroundView
// backgroundView的优先级 > backgroundColor
tableView.backgroundView = nil;
tableView.backgroundColor = [UIColor redColor];
复制代码

10月30号整理

复制代码
一、AFN的使用
1.依赖的框架
* MobileCoreServices.framework
* SystemConfiguration.framework
* Security.framework

2.主头文件:AFNetworking.h

3.创建POST请求对象
// BaseURL是基准路径,格式为-> 协议头://主机名 ,不能包含其他路径
AFHTTPClient *client = [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@"https://api.weibo.com"]];

// Method是请求方法
// path是拼接在基准路径后面的请求路径
// parameters是POST请求的参数
NSURLRequest *post = [client requestWithMethod:@"POST" path:@"oauth2/access_token" parameters:@{
                      @"client_id" : kAppKey,
                      @"client_secret" : kAppSecret,
                      @"grant_type" : @"authorization_code",
                      @"redirect_uri" : kRedirectURI,
                      @"code" : requestToken
}];

4.发送请求,解析服务器的JSON数据
// 创建操作对象
NSOperation *op = [AFJSONRequestOperation JSONRequestOperationWithRequest:post
success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
    // AFN认为请求成功会调用
}
failure : ^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
    // AFN认为请求失败会调用
}];

// 执行操作
[op start];

5.AFJSONRequestOperation默认不接收text/plain类型的数据,当服务器返回text/plain类型的数据时,会认为出错了。可以通过修改源代码解决问题
* 修改AFJSONRequestOperation的下列方法
+ (NSSet *)acceptableContentTypes {
    return [NSSet setWithObjects:@"text/plain", @"application/json", @"text/json", @"text/javascript", nil];
}

二、MBProgressHUD的使用
1.显示HUD
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.labelText = @"哥正在加载中...";
hud.dimBackground = YES;

2.移除hud
[MBProgressHUD hideAllHUDsForView:self.view animated:YES];

三、工具类的作用
1.封装某一块独立的业务功能,比如存储数据、发送网络请求等
2.每个工具类的作用
* HttpTool:负责发送整个微博项目的get\post请求
* StatusTool:负责管理微博数据:抓取微博数据、发送微博
* AccountTool:负责管理账号(存储\读取账号)
复制代码

 10月1号

复制代码
一、SDWebImage的使用
1.依赖的框架
* ImageIO.framework
* MapKit.framework

2.UIImageView下载图片需要的头文件:UIImageView+WebCache.h

3.调用方法下载图片
// url是图片路径
// placeholder是占位图片(正在下载图片时,暂时显示的图片)
// options是缓存策略
- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder
- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options

4.缓存策略-SDWebImageOptions
默认是开启了硬盘\内存缓存的
* SDWebImageRetryFailed   下载失败了会再次尝试下载
* SDWebImageLowPriority   当UIScrollView等正在滚动时,延迟下载图片(放置scrollView滚动卡)
* SDWebImageCacheMemoryOnly 只缓存到内存中,不缓存到硬盘上
* SDWebImageProgressiveDownload 图片会一点一点慢慢显示出来(就像浏览器显示网页上的图片一样)
* SDWebImageRefreshCached 将硬盘缓存交给系统自带的NSURLCache去处理,当同一个URL对应的图片经常更改时可以用这种策略

一般使用SDWebImageRetryFailed | SDWebImageLowPriority

二、动态改变Cell的高度
1.利用tableView代理方法的返回值决定每一行cell的高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

三、UIFont
// 返回字体的行高
* [UIFont systemFontOfSize:10].lineHeight
复制代码

10月2号

复制代码
一、每个Cell高度不一致的一般做法:
1.自定义一个cell,在initWithStyle:reuseIdentifier:构造方法中添加所有可能显示的子控件

2.新建一个模型类,比如StatusCellFrame,作用是:描述一个Cell内部所有子控件的frame属性
* 提供一系列CGRect类型的属性给Cell访问
* 提供一个接口来接收模型数据(比如Status)
* 在接收模型数据的同时,计算所有子控件的frame和cell的高度

3.回到控制器(代理和数据源)
1> 在tableView:heightForRowAtIndexPath:方法中利用StatusCellFrame返回cell的高度
2> 在tableView:cellForRowAtIndexPath:方法中
* 新建自定义cell
* 给Cell传递对应的StatusCellFrame对象

4. 自定义Cell
1> 提供接口接收StatusCellFrame对象
2> 在接收StatusCellFrame对象的同时,设置所有子控件的frame,设置所有子控件的数据

二、日期处理
1.将字符串转成NSDate
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSDate *date = [fmt dateFromString:@"2013-08-08 17:45:34"];

2.将NSDate转为字符串
NSString *timeStr = [fmt stringFromDate:date];
复制代码

 10月4号

复制代码
一、自动伸缩属性
UIViewAutoresizingNone                 不伸缩
UIViewAutoresizingFlexibleLeftMargin   跟父控件左边的距离自动伸缩
UIViewAutoresizingFlexibleRightMargin  跟父控件右边的距离自动伸缩
UIViewAutoresizingFlexibleTopMargin    跟父控件顶部的距离自动伸缩
UIViewAutoresizingFlexibleBottomMargin 跟父控件底部的距离自动伸缩
UIViewAutoresizingFlexibleWidth        宽度跟随父控件宽度自动伸缩
UIViewAutoresizingFlexibleHeight       高度跟随父控件高度自动伸缩

二、设置按钮(UIButton)文字和图片的间距
@property(nonatomic) UIEdgeInsets titleEdgeInsets;
@property(nonatomic) UIEdgeInsets imageEdgeInsets;

三、新浪数据分页传递的参数
* since_id : 会加载 微博ID > since_id 的数据(也就是时间比较晚、比较新的数据)
* max_id : 会加载 微博ID <= max_id 的数据(也就是时间比较早、比较旧的数据)

四、MJRefresh的使用
0.先加入主头文件
#import "MJRefresh.h"

1.添加下拉刷新
MJRefreshHeaderView *header = [MJRefreshHeaderView header];
header.scrollView = self.tableView;
header.delegate = self;

2.添加上拉加载更多
MJRefreshFooterView *footer = [MJRefreshFooterView footer];
footer.scrollView = self.tableView;
footer.delegate = self;

3.监听刷新状态,有2种方式
1> 设置代理delegate,一旦控件进入了刷新状态,就会调用delegate的下列方法
- (void)refreshViewBeginRefreshing:(MJRefreshBaseView *)refreshView
{
    if ([refreshView isKindOfClass:[MJRefreshFooterView class]]) {
        // 上拉加载更多
        
    } else {
        // 下拉刷新
        
    }
}

2> 设置block回调
header.beginRefreshingBlock = ^(MJRefreshBaseView *refreshView) {
    
};
footer.beginRefreshingBlock = ^(MJRefreshBaseView *refreshView) {
    
};

4.通过代码进入刷新状态
[header beginRefreshing]; // 进入刷新状态就会触发相应的代理方法或者block
[footer beginRefreshing]; // 进入刷新状态就会触发相应的代理方法或者block

5.结束刷新状态,回到普通状态
[header endRefreshing];
[footer endRefreshing];

6.可以在MJRefreshBaseView.h中通过控制NeedAudio宏来开启音频功能

7.在MJRefreshFooterView.m和MJRefreshHeaderView.m中可以修改控件显示的文字

五、如果想在内部限制某个控件的宽高,不让外界随便改,可以重写setFrame:方法,在此方法内部设置自己的宽高
复制代码

10月5号

复制代码
一、导航控制器的代理
1.UINavigationController的delegate属性

2.代理方法
1> 即将显示新控制器时调用
/*
 navigationController : 导航控制器
 viewController : 即将显示的新控制器
 */
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated

2> 新控制器显示完毕时调用
/*
 navigationController : 导航控制器
 viewController : 显示完毕的新控制器
 */
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated

二、隐藏控制器刚出现时的滚动条
重写控制器的viewDidAppear方法,覆盖父类默认的操作:显示滚动条

三、tableView每组的头部控件
1.控件宽度默认就是tableView的宽度
2.控件高度由下面的代理方法决定
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section

四、通过tableView的代理方法控制某一行的cell能否达到高亮选中状态
- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath
复制代码
分享到:
评论

相关推荐

    ios安全学习笔记

    iOS安全学习笔记的知识点涵盖了多个方面,从学习资料的搜集到优秀博客文章和GitHub资源的整理,这为iOS安全研究者提供了一个丰富的资源库。以下是对上述内容中提及知识点的详细说明: 1. iOS安全学习资料汇总 首先...

    个人整理超精密的iOS笔记.pdf

    ### iOS 开发基础知识点 #### 1. 视图与坐标系统 - **CGRect**: `CGRect` 是一个结构体,用于表示矩形区域。它由两个部分组成:`CGPoint` 和 `CGSize`。 - **CGPoint**: 表示点的位置,通常用来表示矩形左上角的...

    iOS 心得笔记杂记

    自己搜集的一点 IOS 笔记,很乱,没整理

    《iOS开发标准教程》读书笔记模板.pptx

    iOS开发标准教程读书笔记模板 iOS开发标准教程读书笔记模板是 iOS 开发领域的一本实战性非常强的教程,旨在帮助读者从零基础开始学习 iOS 开发技术。本书共分为四篇,涵盖了 iOS 开发的各个方面,包括 iOS 9 开发...

    笔记整理iOS.docx

    在iOS开发中,我们经常会遇到各种各样的问题,这篇笔记主要涉及了UITableView的自定义样式、UIScrollView的配置以及动态布局的内容。以下是对这些知识点的详细解析: 首先,`cell.selectionStyle = ...

    iOS学习笔记,技术道路走到黑.zip

    这份“iOS学习笔记,技术道路走到黑.zip”资源包含了一个名为"I-Love-iOS_master.zip"的子文件和一个“说明.txt”,它们可能是作者整理的iOS学习路径和代码示例。 首先,Swift语言是苹果公司在2014年WWDC上发布的...

    ios磨砂背景读书笔记扁平简洁ppt模板.rar

    这个名为"ios磨砂背景读书笔记扁平简洁ppt模板.rar"的压缩包文件提供了一个设计精良的PPT模板,它采用了苹果公司的iOS系统的风格,特别是其标志性的磨砂玻璃效果,为读书笔记的呈现提供了专业且现代的视觉体验。...

    《iOS 10 开发指南》读书笔记模板x.pptx

    iOS 10 开发指南 iOS 10 开发指南是 iOS 10 应用开发的详细指南,涵盖了 iOS 10 开发的所有方面。从搭建开发环境到 Swift 语言基础、Cocoa Touch 框架、Xcode Interface Builder 界面开发、使用 Xcode 编写 MVC ...

    读书笔记:iOS 之23种设计模式ObjectiveC 实现《大话设计模式》例子.zip

    读书笔记:iOS 之23种设计模式ObjectiveC 实现《大话设计模式》例子

    读书笔记:常见iOS面试中考察的知识点整理.zip

    读书笔记:常见iOS面试中考察的知识点整理

    iOS开发基本API

    iOS开发基本API知识整理涵盖了多个方面,包括但不限于UI组件的...通过这些知识点的整理,可以看出作者对iOS开发中常用API的深入理解和应用能力,对于想要学习iOS开发的开发者来说,这份笔记无疑是一份非常宝贵的资源。

    iOS概念总结---复习笔记

    本内容经过的我的多次整理,终于可以出山了,内容充实,现在共享出来,希望对you 有所帮助

    MyNotes:iOS学习笔记

    其次,描述中提到的"读书笔记"可能包含了对经典iOS开发书籍的总结,例如《Objective-C编程语言指南》、《iOS编程:The Big Nerd Ranch Guide》等。这些书籍通常会详细解释Objective-C的语法,以及如何使用Xcode进行...

    NiXiang:关于一些逆向学习,js,android,ios整理的笔记

    关于一些逆向学习,js,android,ios整理的笔记 关于github看不到图片,请改host # GitHub Start 192.30.253.112 Build software better, together 192.30.253.119 gist.github.com 151.101.184.133 assets-cdn....

    ios文字处理软件

    在iOS平台上,文字处理软件已经成为了许多用户日常生活和工作中不可或缺的工具,特别是在处理大量文档、笔记或者需要快速转换图片中的文字时。本文将深入探讨基于iOS的文字处理软件,特别是其图像识别技术及其在文字...

    ios传智全套视频代码

    "课堂笔记"部分可能包含了课程的重点摘要,是学习者对课程内容的整理和总结。这些笔记可以作为复习资料,帮助巩固关键知识点,例如UI设计原则、App Store提交指南、Apple的开发规范等。 最后,`.DS_Store`和`....

    ccna-ccnp读书笔记整理的材料。

    《CCNA-CCNP读书笔记整理的材料》 在信息技术领域,Cisco Certified Network Associate (CCNA) 和 Cisco Certified Network Professional (CCNP) 是两项极为重要的认证,它们代表着网络专业人士在路由与交换领域的...

    onenote笔记.zip

    综上所述,"onenote笔记.zip" 文件很可能是用户整理的个人笔记集合,涵盖了各种生活、工作或学习内容。通过解压并打开这些笔记,用户可以回顾和复习已记录的信息,或者与他人共享和协作。了解并充分利用OneNote的...

    IOS开发笔记整理49之详解定位CLLocation

    在iOS应用开发中,集成定位功能是一项常见的需求,而`CLLocationManager`是苹果提供的核心定位服务类,用于获取设备的地理位置信息。本文将深入讲解`CLLocationManager`的使用及其相关知识点。 首先,`...

    IOS面试宝典 最新

    【iOS面试宝典——最新版】是一份集大成的面试指南,专为那些准备投身或已经在iOS开发领域摸爬滚打的工程师们量身打造。...同时,配合【印象笔记.pdf】,可以更系统地整理和回顾所学,巩固知识,提高面试成功率。

Global site tag (gtag.js) - Google Analytics