我是一名iOSer,写了有3,4个APP了。从零开始,先说说最底层的吧。分享给新手。新手快上车~
- 对于登录用户的信息,要做成单例。并且储存起来。血一般的教训~不说了,都是泪。
- 对于配置信息,一般也需要做成单列,储存起来。
- 对于视图,一定要继承写,并且封装起来,对你以后有好处的!
- 对于方法类,工具类,要用category来写
2017-11-16更新
1.一般iOS程序都会用到pod,在写Podfile的第三方库名称时,最好加上版本。避免你再次pod install的时候,更新到最新方法导致第三方的一些方法没有而导致项目报错
2.对于block的一些个人见解和结束循环引用的一个思想
-
循环引用的形成
3BA38CE5-6531-4EC6-8B83-5A5F86A08C71.png -
接触循环引用思想
0115669F-DA6B-430D-B978-B2BA9ABDCC81.png
2017-11-29更新
UITextField的值的获取
分享一个非常容易让人忽略的事情,偶然发现的.有的人对于UITextField的值获取,可能比较麻烦.写什么代理啊,计算,stirngappendstring之类的...
- 现在发现了一个非常简单的方法,苹果给了一个枚举.我们先来看看.UITextField继承于UIControl
- UIControl有一个方法
- (void)addTarget:(nullable id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents;
3.我们看一下UIControlEvents枚举
typedef NS_OPTIONS(NSUInteger, UIControlEvents) {
UIControlEventTouchDown = 1 << 0, // on all touch downs
UIControlEventTouchDownRepeat = 1 << 1, // on multiple touchdowns (tap count > 1)
UIControlEventTouchDragInside = 1 << 2,
UIControlEventTouchDragOutside = 1 << 3,
UIControlEventTouchDragEnter = 1 << 4,
UIControlEventTouchDragExit = 1 << 5,
UIControlEventTouchUpInside = 1 << 6,
UIControlEventTouchUpOutside = 1 << 7,
UIControlEventTouchCancel = 1 << 8,
UIControlEventValueChanged = 1 << 12, // sliders, etc.
UIControlEventPrimaryActionTriggered NS_ENUM_AVAILABLE_IOS(9_0) = 1 << 13, // semantic action: for buttons, etc.
UIControlEventEditingDidBegin = 1 << 16, // UITextField
*UIControlEventEditingChanged = 1 << 17,
UIControlEventEditingDidEnd = 1 << 18,
UIControlEventEditingDidEndOnExit = 1 << 19, // 'return key' ending editing
UIControlEventAllTouchEvents = 0x00000FFF, // for touch events
UIControlEventAllEditingEvents = 0x000F0000, // for UITextField
UIControlEventApplicationReserved = 0x0F000000, // range available for application use
UIControlEventSystemReserved = 0xF0000000, // range reserved for internal framework use
UIControlEventAllEvents = 0xFFFFFFFF
};
我在那个枚举前加星了.看到了没有
5.接下来我们就这样写
[phoneNumberTF addTarget:self action:@selector(phoneNumberTFValueChange:) forControlEvents:UIControlEventEditingChanged];
6.实现phoneNumberTFValueChange:方法即可
UITextField的左右视图
分享一个小技巧
UITextField 有一个属性为leftView/rightView 可以给这个view赋值,显示在左/右侧
但是左/右视图的显示,需要一个枚举,leftViewMode/rightViewMode
枚举是这样的:
typedef NS_ENUM(NSInteger, UITextFieldViewMode) {
UITextFieldViewModeNever,
UITextFieldViewModeWhileEditing,
UITextFieldViewModeUnlessEditing,
UITextFieldViewModeAlways
};
用法:
UITextField *passwordTF = [[UITextField alloc] init];
passwordTF.leftViewMode = UITextFieldViewModeAlways;
passwordTF.rightView = ({
UIView *backView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 88, 40)];/// 这里多加一个view是为了控制button的位置,不然,给button赋值frame会发现没有用的,这个问题我只能这样解决
UIButton *codeBtn = [UIButton buttonWithType:UIButtonTypeCustom];
codeBtn.frame = backView.bounds;
[codeBtn setBackgroundColor:kLoginCodeBtnColor];
[codeBtn setTitle:@"xxxx" forState:UIControlStateNormal];
codeBtn.titleLabel.font = [UIFont systemFontOfSize:12];
[codeBtn addTarget:self action:@selector(codeButtonClick:) forControlEvents:UIControlEventTouchUpInside];
[backView addSubview:codeBtn];
backView;
});
2018-5-18更新
数组的KVC的一些用法
在我们取数组值的时候,进行一些比较大小,或者求和之类的操作.可以简化为
目前只找到这些,虽然不多,也算是小技巧
如有补充,请留言!!!
NSArray * array = @[
@{@"name":@"hwc",
@"count":@(10),
@"url":@"blog.csdn.net/hello_hwc"
},
@{@"name":@"baidu",
@"count":@(20),
@"url":@"www.baidu.com"
},
@{@"name":@"google",
@"count":@(22),
@"url":@"www.google.com"
}
];
NSArray * nameArray = [array valueForKeyPath:@"name"];
NSNumber *sum = [array valueForKeyPath:@"@sum.count"];
NSNumber *max = [array valueForKeyPath:@"@max.count"];
NSNumber *min = [array valueForKeyPath:@"@min.count"];
NSLog(@"NameArray:%@",nameArray.description);
NSLog(@"Sum:%@",sum.description);
NSLog(@"max:%@",max.description);
NSLog(@"min:%@",min.description);
2018-6-25更新
获取AFNetworking的block块内的值后 在运行block块外的代码
__block id obj = nil;
[NetManager POST:urlString parameters:para progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
CFRunLoopStop(CFRunLoopGetMain());//先运行
obj = resuponseObject;
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
CFRunLoopStop(CFRunLoopGetMain());//先运行
obj = error;
}];
CFRunLoopRun(); //后运行
NSLog(@"%@",[obj class]);
纯手写的....应该没有什么错误,有错误,请指出.摘自这里1楼帖子,感谢