iOS 开发里的那些散手(二)

*  一直有把 iOS 开发里用到的一些边边角角的小技巧写成一个集合的想法,但一直没有付诸实践。刚好备忘录里的零零碎碎记的东西够凑成一篇东西来,就把之前的一篇 OC 笔记 - 一些小技巧和问题处理的集合 给改了名,加上现在的第二篇,打算以后写成一个系列。长路漫漫,与诸君共勉。*

一、打印bool值

Objective-C
1
2
Bool _YESorNO = YES;
NSLog(@"BOOL--YESorNO-->%@",_YESorNO?@"YES":@"NO");

二、判断系统语言

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
NSArray * allLanguages = [defaults objectForKey:@"AppleLanguages"];
NSString * preferredLang = [allLanguages objectAtIndex:0];

NSLog(@"当前语言:%@", allLanguages); 
       
if ([preferredLang rangeOfString:@"en"].location != NSNotFound) {
//如果是英文,做相关处理
   ...
}else if([preferredLang rangeOfString:@"zh-Hans"].location != NSNotFound){
//如果是中文,做相关处理
   ...         
}

三、检测数据类型

Objective-C
1
2
int myObject = 10;
[myObject isKindOfClass:[NSString class]]

四、获取NSString字符串字节长度

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- (int)convertToInt:(NSString*)strtemp
{
    int strlength = 0;
    char* p = (char*)[strtemp cStringUsingEncoding:NSUnicodeStringEncoding];
    for (int i=0 ; i<[strtemp lengthOfBytesUsingEncoding:NSUnicodeStringEncoding] ;i++) {
        if (*p) {
            p++;
            strlength++;
        }
        else {
            p++;
        }
    }
    return strlength;
}

使用方式

Objective-C
1
2
NSString *tempStr = @"Hello World!"
Int strLength = [self convertToInt:tempStr];

五、更新 tableView 并滚动到固定下标位置

在更新 tableView 时,调用此方法

Objective-C
1
2
3
4
5
-(void)updateTableView{
NSIndexPath* path=[NSIndexPath indexPathForRow:self.talkArr.count-1 inSection:0];
[self.talkView insertRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationTop];
[self.talkView scrollToRowAtIndexPath:path atScrollPosition:UITableViewScrollPositionBottom animated:YES];
}

六、iOS 解决 NSData 转 NSString 后字符为空

iOS 中,将 NSDataNSString 的一般方法为

Objective-C
1
[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

但是当 data 中包含 00 时,所获得的新字符就会为 nil,这时我们应该这样转

Objective-C
1
[NSString stringWithUTF8String:[data bytes]];

七、判断一个 view 是否为另一个 view 的子视图

Objective-C
1
BOOL isSubView = [myView isDescendantOfView:self.view];

八、cell 添加 button 后通过 button 获取到 cell

首先给 Button 添加点击方法

Objective-C
1
[cell.btn addTarget:self action:@selector(cellBtnClicked:event:) forControlEvents:UIControlEventTouchUpInside];

在点击方法里实现

Objective-C
1
2
3
4
5
6
-(void)didClickButton:(UIButton *)button  
{  
Mycell *cell = (Mycell *)button.superview.superview;  
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];  
 NSLog(@"index of current cell:%ld", indexPath.row);  
}