1.可变数组中是不能添加除了对象以外的如CGFloat NSinteger double类型的,我们应该在用 addObject:添加这些对象以外的时候注意
[_all_Money addObject: @([_array[j] ExclusivePrice] * [_array[j] count])];
2.数组中内部元素求和还有求平均值
NSArray *testArray = [NSArrayarrayWithObjects:@"2.0", @"2.3", @"3.0",@"4.0", nil];
NSNumber *sum = [testArrayvalueForKeyPath:@"@sum.floatValue"]
NSNumber *avg= [testArray valueForKeyPath:@"@avg.floatValue"];
3.数组中替换(例子)
我想要在NSMutableArray替换一个数组对象,从_alertsArray获取了oldArray,然后修改值,用newArray替换oldArray,但是没实现。
NSArray *oldArray=(NSArray*)[_alertsArray objectAtIndex:[indexPath row]];
NSMutableArray *newArray = [[NSMutableArray alloc] initWithArray:oldArray copyItems:YES];
[newArray replaceObjectAtIndex:3 withObject:@"YES"];
[_alertsArray replaceObjectAtIndex:[indexPath row] withObject:newArray];
解决办法
NSMutableArray *newArray = [_alertsArray mutableCopy];
[newArray replaceObjectAtIndex:3 withObject:@"YES"];
_alertsArray = newArray;
4.textfield 限定字数,适用于中英文混合(kMaxLength最大字数)
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(textFiledEditChanged:)
name:@"UITextFieldTextDidChangeNotification"
object:_PlanText];
-(void)textFiledEditChanged:(NSNotification *)obj{
UITextField *textField = (UITextField *)obj.object;
NSString *toBeString = textField.text;
NSString *lang = [[UITextInputMode currentInputMode] primaryLanguage]; // 键盘输入模式
if ([lang isEqualToString:@"zh-Hans"]) { // 简体中文输入,包括简体拼音,健体五笔,简体手写
UITextRange *selectedRange = [textField markedTextRange];
//获取高亮部分
UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0];
// 没有高亮选择的字,则对已输入的文字进行字数统计和限制
if (!position) {
if (toBeString.length > kMaxLength) {
textField.text = [toBeString substringToIndex:kMaxLength];
[MBProgressHUD showInfoMessage:@"只能可以输入12个字"];
}
}
// 有高亮选择的字符串,则暂不对文字进行统计和限制
else{
}
}
// 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况
else{
if (toBeString.length > kMaxLength) {
textField.text = [toBeString substringToIndex:kMaxLength];
}
}
}
5.数组去重
1.利用NSDictionary的AllKeys(AllValues)方法
可以将NSArray中的元素存入一个字典,然后利用AllKeys或者AllValues取得字典的所有键或值,这些键或值都是去重的。
示例代码:
NSArray *arr = @[@111,@222,@111];
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
for (NSNumber *number in arr) {
[dict setObject:number forKey:number];
}
NSLog(@"%@",[dict allValues]);
2013-05-21 12:03:49.449 test1[4377:c07] (
111,
222
)
2.利用NSSet的AllObjects方法
这种方法更快,利用NSSet不会添加重复元素的特性。不过去重的数组没有进行排序,如果需要排序,可以使用NSSortDescriptor类。
示例代码:
NSArray *arr = @[@111,@222,@111];
NSSet *set = [NSSet setWithArray:arr];
NSLog(@"%@",[set allObjects]);
2013-05-21 12:06:26.508 test1[4547:c07] (
111,
222
)
3.排序的去重
很多时候可能会遇到需要去除NSArray重复的元素,用了很多方法。
最方便快捷的是NSSet.但是NSSet去重后有时候数组元素的顺序会
打乱。于是换了另外一种方法如下:
NSMutableArray *categoryArray = [[NSMutableArray alloc] init];
for (unsigned i = 0; i < [nameArray count]; i++){
if ([categoryArray containsObject:[nameArray objectAtIndex:i]] == NO){
[categoryArray addObject:[nameArray objectAtIndex:i]];
}
}
6.解决UICollectionView的Cell复用引起的布局混乱问题
1. 首先创建一个可变数组,用来存放Cell的唯一标示符
// 用来存放Cell的唯一标示符
@property (nonatomic, strong) NSMutableDictionary *cellDic;
#warning 别忘了初始化哟
self.cellDic = [[NSMutableDictionary alloc] init];
2. 在cellForItemAtIndexPath:这个方法中作相应的一些处理即可,代码如下
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
// 每次先从字典中根据IndexPath取出唯一标识符
NSString *identifier = [_cellDic objectForKey:[NSString stringWithFormat:@"%@", indexPath]];
// 如果取出的唯一标示符不存在,则初始化唯一标示符,并将其存入字典中,对应唯一标示符注册Cell
if (identifier == nil) {
identifier = [NSString stringWithFormat:@"%@%@", DayCell, [NSString stringWithFormat:@"%@", indexPath]];
[_cellDic setValue:identifier forKey:[NSString stringWithFormat:@"%@", indexPath]];
// 注册Cell
[self.collectionView registerClass:[CalendarCollectionViewCell class] forCellWithReuseIdentifier:identifier];
}
CalendarCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
// 此处可以对Cell做你想做的操作了...
return cell;
}
7.关于UIView的autoresizingMask属性的研究
enum {
UIViewAutoresizingNone = 0,
UIViewAutoresizingFlexibleLeftMargin = 1 << 0,
UIViewAutoresizingFlexibleWidth = 1 << 1,
UIViewAutoresizingFlexibleRightMargin = 1 << 2,
UIViewAutoresizingFlexibleTopMargin = 1 << 3,
UIViewAutoresizingFlexibleHeight = 1 << 4,
UIViewAutoresizingFlexibleBottomMargin = 1 << 5
};
UIViewAutoresizingNone就是不自动调整。
UIViewAutoresizingFlexibleLeftMargin 自动调整与superView左边的距离,保证与superView右边的距离不变。
UIViewAutoresizingFlexibleRightMargin 自动调整与superView的右边距离,保证与superView左边的距离不变。
UIViewAutoresizingFlexibleTopMargin 自动调整与superView顶部的距离,保证与superView底部的距离不变。
UIViewAutoresizingFlexibleBottomMargin 自动调整与superView底部的距离,也就是说,与superView顶部的距离不变。
UIViewAutoresizingFlexibleWidth 自动调整自己的宽度,保证与superView左边和右边的距离不变。
UIViewAutoresizingFlexibleHeight 自动调整自己的高度,保证与superView顶部和底部的距离不变。
UIViewAutoresizingFlexibleLeftMargin |UIViewAutoresizingFlexibleRightMargin 自动调整与superView左边的距离,保证与左边的距离和右边的距离和原来距左边和右边的距离的比例不变。比如原来距离为20,30,调整后的距离应为68,102,即68/20=102/30。
其它的组合类似。
最后送上一波不错的三方库
1.在用户第一次使用app时候通常会遇到新功能引导页面!,在这里小编给大家介绍另外一种通过添加“指导标记”到界面来让用户快速熟悉你的APP第三方库!(http://t.cn/RU4SBqo) 一共有5种不同的样式哦~希望可以给大家做项目时候带来一些灵感
2.一个app往往有很多界面,而界面之间的跳转也就是对应控制器的跳转,控制器的跳转一般有两种情况 push 或者 modal,push 和 modal 的默认效果是系统提供的,但也可以自定义.有兴趣了解一下自定义的童鞋可以看这篇,iOS动画指南 - 6.可以很酷的转场动画.
3.一行代码快速集成tableView上头部视图缩放图片,并且不会占用tableView的头部视图,无侵入性,全用runtime实现的。http://bbs.520it.com/forum.php?mod=viewthread&tid=1689&page=1&extra=#pid14886
4.Self-Manager 源于我们团队内部的黑话,“诶?你刚去的创业公司有几个 iOS 开发啊?” “就我一个” “靠,你这是 Self-Manager 啊”http://blog.sunnyxx.com/2015/12/19/self-manager-pattern-in-ios/
最近会不断推出一些轮子,这次写了一个控件,类似QQ表情键盘,键盘布局,根据coderwhy提供的思路搭建出来的。http://bbs.520it.com/forum.php?mod=viewthread&tid=1787
一个app往往有很多界面,而界面之间的跳转也就是对应控制器的跳转,控制器的跳转一般有两种情况 push 或者 modal,push 和 modal 的默认效果是系统提供的,但也可以自定义.有兴趣了解一下自定义的童鞋可以看这篇,iOS动画指南 - 6.可以很酷的转场动画.
5.判断版本是否升级https://github.com/ArtSabintsev/Harpy
6.连不上网,tableview小游戏https://github.com/dasdom/BreakOutToRefresh
7.用户指导,按步骤操作https://github.com/ephread/Instructions
8.用户习惯操作三十天连续使用图标变换https://github.com/Ramotion/adaptive-tab-bar
9.YYKit 是一组庞大、功能丰富的 iOS 组件https://github.com/ibireme/YYKit
10.越来越多的应用为每一个 VC 设置单独的导航条,而不是之前那样使用一个全局统一的导航条,因为不同的 VC 有不同的视觉样式,前一个是蓝色的,后一个也许要做成红色、透明,或者干脆没有导航条。https://github.com/rickytan/RTRootNavigationController