声明:本文以下内容均摘自笔者从初学阶段至今的日常笔记,仅供学习交流参考,难免有些理解偏差,欢迎指出
1.badgeVaule气泡提示,self.navigationController.tabBarItem.badgeValue
2.git终端命令方法> pwd查看全部 >cd>ls >之后桌面找到文件夹内容,以cd xxxx ,ls格式>git status查看>git pull origin master从网上储存库中下下来。 返回上一级地址命令cd ..
3.全球最大开源代码托管平台——SourceForge
4.sections更改数量可使tableview分量
5.static cells静态tableview
6.nothing to commit, working directory clean 表示上传Git成功
7.git提交步骤
git add . //此处add后加空格.
git commit -m "xxx"
git pull origin master //更新代码
git push origin master //提交
8.Identifier是写在navigation上边的
9.AF的方法中全部属于异步下载。
10.无论使用collectionView还是tableView的自定义cell,都需要先在viewDidLoad中注册cell
11.可以使用mac自带的数码测色计来获取颜色的RGB值
12.例子:
indexPath.row==0 && indexPath.section==1
不同的section中的indexpath的row是会归0重置的,从0开始重头计
13.代理协议写在m文件即可,不用过多的暴露在头文件中
14.radioButton的图片更改方法,不用代码实现,在button的State 。cc。oo。nn。ff。ll。gg。中选择Default为未点击时状态,可赋予图片,选择selected为选中时状态,可赋予图片,直接使用imageView的方法是不专业的
15.在button的中选择Default为未点击时状态,,直接使用imageView的方法是不专业的。
16.textView加边框
#import
textview对象.layer.borderColor = UIColor.grayColor.CGColor;
textview对象.layer.borderWidth = 5;
self.textView.layer.masksToBounds = YES;
self.textView.layer.cornerRadius = 5;
17.ruby -e "$(curl -fsSL https://raw.githubusercontent...)" //下载安装git插件
18.scrollView可以专门用来自动处理键盘布局,但需要嵌入代码
19.有造好的轮子就要用,不要傻乎乎的想要自己去造,理解就可以了,闲暇时间自己研究,工作当中效率进度第一
20.alloc之后几乎全是init方法
21. if(indexPath.row==2 && indexPath.section==0){//row表示在一个section下顺序第几个,section表示第几个section
22.区别:
-(void)viewDidLoad//加载后调用
-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil//进入后就调用
23.git比svn要强大
24.@property (assign,nonatomic) BOOL hONG; //bool型只能用于状态判断,只有yes和no,非黑即白 assign表示弱类型的赋值 nonatomic会有先后顺序 简单变量是assign,指针变量是strong
//@property的意思是属性,类似于c++的一个成员变量,在oc中成为一个类的属性
@implementation具体方法的实现
25.来记个方法,这是针对不同类型的初始化方法
//push界面之前的初始化方法,该方法是在push xib类型界面之前进行初始化的方法
LSIntegralShopViewController * integrelShopViewController =[[LSIntegralShopViewController alloc]initWithNibName:@"LSIntegralShopViewController" bundle:nil]; //这里那个nibName是写的那个controller的对应的那个类
//针对toryboard的初始化方法
[WPUtil getViewControllerWithIdentifier: storyboardName:] //此处Identifier是storyboard上的Identifier ID,而UINavigationController * homeNavigationController = [WPUtil getViewControllerWithIdentifier:@"homeNavigation" storyboardName:@"Home"];这里的Identifier则是Navigation上的ID,注意区分
26.上下bar的地方切图使用时,后缀加上@2x,注意是在.png前使用,同时图盘拖到2x那格中
27.2x图片清晰度更高
28.已经在界面上都配置好了,代码里面就不需要这些设置了
只需处理点击事件,比如选中第一个,第一个button.selected = YES,其他两个button.selected = NO
29.UIButton的edge可以调整image和title
30.[self.view endEditing:YES]; //直接撤销键盘的方法
31.manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html", nil];//默认为json格式,若为json可省略这行代码
32.+方法写在头文件中,谁都可以调用,只要引用其头文件名称,如viewController是可以在任何地方初始化任意次的
33.使用最底部或最上部的UIButton或某个控件来支撑住scrollview,来让scrollview知晓其最大距离
34.NSUInteger表示无符号整型,即非负数
35.严格按照流程来,先在外边,比如说美工发给你的图片,把名字改好,[email protected],然后再拖进去,还有,文件名不要出现空格,这些有空格的通通改掉,把有问题的全部删了,重新加
36.至于重写set和get方法,简要说明一下,当我们使用@property这用法之后,系统便会自动给我们定义的变量以一个默认的set和get方法。插一句,_any和self.any的区别,_any就是只指_any本身,是系统会生成的,而如果我们重写了any的set方法后,self.any会调用我们重写的set方法中的内容,而_any不是,比如这句
-(void)setCount:(NSUInteger)count
{
_count = count;
}
这里表示的是将系统默认给我们生成的count变成我们自定义的count,达到我们想要的目的。_any就是单单指当我们使用@property后系统给我自动生成的一个any,而self.any不同,它会自动调用(set和get方法本身就包含在其中,也可以理解为就是它自身的一个属性一部分)我们重写后的set方法,当我们self.any的时候,其中重写的set方法中的任何内容都会被我们使用,所以即使我们只self.any,也可实现许多只要set方法中写出的效果,大致是这个意思
37.推荐使用代理传值,通知的观察者模式效率低下
38.cell控制视图显示,controller负责网络解析
39.取数据的时候,要看返回的数据是什么样子的,需要两个就两个,需要一个就一个,
data = {
CurrentPageIndex = 1;
PageSize = 10;
TotalItemCount = 1;
TotalPageCount = 1;
data = (
{
ClickNumber = 0;
ID = 1796;
Norm = "\U6876";
Picture = "/upload/goods/default.jpg";
SellerRetailPrice = 10;
TheSorting = 12500000;
TypeID = 22;
goodsName = "\U51b0\U51b0\U4e50";
goodsTypeName = "\U7eaf\U51c0\U6c34";
sellerId = 125;
sellerName = "\U51e4\U51f0\U57ce\U6c34\U5e97";
sellerState = 1;
}
);
};
msg = "" ;
result = ok;
}
第一个data取的是里面的一大堆即一个字典,第二个data才是个数组,@"data"这个大体是指前一个data是拿到一个字典的数据,第二个data是那里面的数组咯
40.不要直接用button或控件push到下一个界面,尤其是在tableView的cell上
41.shopTVC.delegate = self;//上一个界面的代理设为这个界面自身,在上一个见面中调用代理的时候,因为上一个界面的代理已经被设置为这个界面,所以在上一个见面中调用其自身代理时,实际上是这个界面在执行
42.没有了summary,但是原来的summary的功能可以在targets的general里面找到
43.关于尝试新方法,比如:将字典中的值赋值给一个float,有时候.不行可以换( ) 或 ]试试看有没有其方法
float left= [aaa[@"abc"] floatValue];
44.else if (self.btnOfAddress.selected){ //点了之后立马又弹回去了,当执行的时候按钮状态已经弹回去了,如果需要一直是点击状态那么你需要设置selected=YES,这是状态是需要设置的,不然就不会有效果,需要是选中状态,那么你就要在合适的位置设置起,btn.selected = YES
45.总之,要看他数据需要什么,保存的是哪里
46.本着,谁分配谁管理的原则
47.thread:breakpoint 1.2,在该行最左侧的蓝色矩形区域右键,选择delete breakpoint即可。
48.逻辑步骤关系,所有异步都要先完成数据的请求,成功后,返回数据信息后才开始跳转界面,换句话说,需要将需要提交的数据全部获取到之后,再做统一提交处理
49.所有网络请求都用异步,上传提交也叫下载,只不过下载的内容可能就是个提示性的东西,提示你提交成功没有
50.字符串比较用isEqualToString,不用等号, ]是调方法 ( )是优先级
51.提交输入框信息,需要在解析数据时获取,而不能在初始化时就去获取
52.断点不是只能在运行前设置,在运行当中也可以设置
53.一切都以数据为中心,先拿到数据,再显示页面。比如tableView是先得到返回行数,再执行的cell显示,白话讲就是,点击了左边的cell选中后,开始解析,由于在解析时保存了数据,这样返回行就有了数据,这时就会返回显示返回行数目的数据,这样一来便可以在cell中显示
54.异步下载中间的代码是异步的,要执行,但是不是马上执行,网络有数据返回的时候
55.然而机智如我,合理运用函数参数名赋予的作用
-(void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];//这个函数是当cell被点击的时候调用的方法,最好不要用作初始化的地方
if(selected == YES){
self.buttonOfDetailed.hidden=NO;
}else{
self.buttonOfDetailed.hidden=YES;
}
// Configure the view for the selected state
}
56.tableView的cell重复相应点击的问题可能是在Table View这一栏选项中关于Selection的选择问题,一般单次响应点击会选择Single Selection这一选项
57.这个方法只有在手指点击cell,然后离开后才调用,而不是点击的时候就调用
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
58.tableView果然是用到最多最多的,无处不在,以各种各样你想象不到的方式出现,给你一种似乎任何效果都可以用它来实现出来的内心的震撼
59.command+3(2,1)调节模拟器放大尺寸
60.swift注意:如果你的代码中有不需要改变的值,请使用let关键字将它声明为常量。只将需要改变的值声明为变量。
61.swift中,常量的值一旦设定就不能改变,而变量的值可以随意更改。常量和变量必须在使用前声明,用let来声明常量,用var来声明变量。
常量和变量必须在使用前声明,用let来声明常量,用var来声明变量。下面的例子展示了如何用常量和变量来记录用户尝试登录的次数:
let maximumNumberOfLoginAttempts = 10
var currentLoginAttempt = 0
这两行代码可以被理解为:
“声明一个名字是maximumNumberOfLoginAttempts的新常量,并给它一个值10。然后,声明一个名字是currentLoginAttempt的变量并将它的值初始化为0.”
在这个例子中,允许的最大尝试登录次数被声明为一个常量,因为这个值不会改变。当前尝试登录次数被声明为一个变量,因为每次尝试登录失败的时候都需要增加这个值。
你可以在一行中声明多个常量或者多个变量,用逗号隔开:
var x = 0.0, y = 0.0, z = 0.0
62.initWithNibName是加载View视图事件
63.关于界面适配的问题,一个是对于底部tabbar所留下的空白的处理方法:
//隐藏底部tabbar留下的空白
self.hidesBottomBarWhenPushed = YES;
这里http://www.cocoachina.com/bbs... 有一个思路的参照
但是具体实现需要具体分析一下,总的来说是把该方法加到即将要进入(即存在多余tabbar空白的界面)的前一个界面的-(void)viewWillAppear:(BOOL)animated中来实现,也就是在页面跳转前
64.思路思路思路啊
#pragma mark - 发表帖子
-(void)publishAction
{
//判断是否已经登陆
BOOL isLogin = [Utility getBoolForKey:GYH_PATIENT_IS_LOGIN];
if (isLogin) {
//进入发帖界面
UIViewController *vc = viewControllerInStoryBoard(@"GHYNewPostController", @"1_home_7_quan");
[self.navigationController pushViewController:vc animated:YES];
}else{
//调出登陆界面,登陆界面的返回是直接返回上一级界面,并不是主页
[Utility jumpToLoginWithViewController:self];
}
}
65.确实是深深感到对代码的层次深度的理解到了瓶颈期的时候。
66.本着别人坑我,我不坑人的态度,变量的命名和注释都是极尽规范和详细的,也算对的起一个处女座的人设了。
67.for in实际上是快速枚举,跟for循环意义上还是有区别的。目前可以理解为for...in 语句用于对数组或者对象的属性进行循环操作
68.NSArray的枚举操作中有一条需要注意:对于可变数组进行枚举操作时,你不能通过添加或删除对象这类操作来改变数组容器。如果你这么做了,枚举器会很困惑,而你将得到未定义的结果。
69.git经过一次更改就要提交一次是为了给自己一个后悔的机会,如果做了20次更改的时候一起提交,那么想要重新返回之前的某一项功能就会十分的费时费力,得不偿失
70.UITableViewCell的属性selectionStyle设置为UITableViewCellSelectionStyleNone 如果是在storyboard里面,就设置为none类型 //关于cell的点击响应不显示颜色,即达到点击无效果
71.当手指离开某行时,就让某行的选中状态消失
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
//当手指离开某行时,就让某行的选中状态消失
[tableView deselectRowAtIndexPath:indexPath animated:YES];
self.tableView.backgroundColor = [UIColor clearColor];
if(indexPath.section == 0 && indexPath.row == 2){
}
}
72.图片圆形
_btnHead.layer.masksToBounds = YES; _btnHead.layer.cornerRadius = 按钮宽的一半; //图片圆形
73.记一笔,关于tableView的section的header,是一个之前注意到的地方,今天突然重新意识到的问题,这个header如果什么都不填写会显示为no header,就是取消header的显示状态,那么,我们可以用一个空格代替的方式来达到既不想有文字展示但是又有header显示的效果。
74.思路要清晰,要灵活,困的时候不要写代码,越写越乱,困了直接去睡觉
75.要隐藏section下的cell的话,在返回section个数的地方进行相应判断即可
76.如何改变section的headr的颜色
-(UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
UIView *headerView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 30)] autorelease];
if (section == integerRepresentingYourSectionOfInterest){
[headerView setBackgroundColor:[UIColor redColor]];
}else {
[headerView setBackgroundColor:[UIColor clearColor]];
}
return headerView;
}
77.如果在视图上固定了cell的行高,就不需要在代码中重复设定
78.如果实在找不到或不确定在哪里使用过某个值,去放大镜哪里搜索看看吧。
79.虽然感觉遇到的都是小的功能问题,但都是重要的逻辑性问题。
80.在做网络请求提交的时候,如果涉及到用户个人的信息,一定要有能够识别是哪一个用户的信息在里面,否则会出现问题,找不到具体是哪个用户的信息
81.alertView的内容最好分开写,放在一起写可能会出现调用延迟的情况
82.UIAlertView的响应方法要想被执行,那么UIAlertView的delegate必须是设为self。
83.不是万不得已,不要写死数据和模块
84.字符串NSString中去掉空格
NSString * string =[str3 stringByReplacingOccurrencesOfString:@";" withString:@" "];//OS字符串NSString中去掉空格(或替换为某个字符串)
85.设置异步解析断点时,要在方法内设置断点,因为代码执行不是同步进行的,不会一步一步按照顺序执行下去,所以如果不是在方法内部设置断点,可能会出现直接跳过这段方法而查看不到的断点行为。
86.字典NSDictionary一般的遍历方法都是:
NSArray* arr = [yourdictonary allKeys];for(NSString* str in arr){
NSLog("%@", [yourdictonary objectForKey:str]);
}
但是如果就这样遍历的话,所打印出来的结果是不按照你添加的顺序打印出来的。很简单,只要先将arr进行排序,再将字典遍历打印出来:
NSArray* arr = [yourdictonary allKeys];arr = [arr sortedArrayUsingComparator:^NSComparisonResult(idobj1, id obj2)
{
NSComparisonResult result = [obj1 compare:obj2];
return result==NSOrderedDescending;
}];
就这样,将字典的key进行一个排序后,就能根据自己的需求将字典遍历打印出来。
87.在mac上浏览图片不需要双击,选中后直接按空格就可以了
88.改变字符串中个别字符的颜色:
NSString * onlineString = @"";
if (isOnline == 1) {
onlineString = @"[在线]";
}else{
onlineString = @"[离线]";
}
NSString * name = [NSString stringWithFormat:@"%@%@",onlineString, cell.nameLabel.text];
NSMutableAttributedString * attString = [[NSMutableAttributedString alloc] initWithString:name];
[attString addAttributes:@{
NSForegroundColorAttributeName:[UIColor lightGrayColor], NSFontAttributeName:MyFont(13)} range:[name rangeOfString:onlineString]];
cell.nameLabel.attributedText = attString;
//设置text字的属性,比如说同一个label中的不同字符串可以拥有不同的属性,首先初始化,NSForegroundColorAttributeName,设置字体颜色,NSFontAttributeName,字体大小,range,范围,name rangeOfString:onlineString]],name中的onlineString。最后显示的时候就不用text属性,而用attributedText属性
89.关于IOS系统升级后的屏幕适配的一个原因:
这个原因确实是LaunchImage没配。不过这么说确实容易觉得奇怪,这又不是启动界面,直觉这俩好像没什么关系。所以我来讲个故事……
很久以前,iPhone就是这么矮矮的。
后来有一天,出来了iPhone5,宽度不变,高度长了一截。记得大家当时都在吐槽……
无论如何,当时 AppStore 已经有很多的app了;屏幕变了以后,原来的那些app该怎么显示呢?肯定不能直接拉长,把方块拉成长方形;也不能直接按拉长的屏幕尺寸渲染,虽然理论上不应该有问题,但当时有app的代码是写死坐标+计算相结合的,直接改变肯定会造成显示错乱。
所以苹果想的办法就是,给原来的app一点准备的时间,要求尽快适配新屏幕;在适配好之前,显示的高度不变,像你看到的那样居中显示,上下各一道黑边;适配好之后,再按拉长的屏幕显示。
那么app怎么告诉苹果系统,对于这划时代的新屏幕它是准备好了还是没准备好呢?答案就是:LaunchImage。
系统会先看一个app有没有4寸的LaunchImage。只要给了,那就假定已经适配好了,会按4寸显示;反之,只要没给,就会按3.5寸显示,也就是你看到的黑边。
从那以后,再推出iPhone6、6Plus的时候,也是按同样的方法区分的。没给3x LaunchImage的会直接拉伸显示,给了的才会按大屏渲染,帮助已有的app度过那青黄不接的年代。
90.界面延迟跳转
[self performSelector:@selector(jumpToModifyInfo) withObject:nil afterDelay:2.0]; //界面延迟跳转
91.
-(void)generateSelectedIndexPath
{
if (![MyUtil isNilOrEmpty:self.attentionTopic]) {
NSArray * array = [self.attentionTopic componentsSeparatedByString:@";"];
for (NSInteger i = 0; i < array.count; i++) {
NSString * oneTopic = array;
for (NSInteger j = 0; j < self.categories.count; j++) {
NSString * typeName = self.categories[j][@"mentalType"][@"type_name"];
if ([oneTopic isEqualToString:typeName]) {
[<