IOS知识点

获取IOS系统版本的四种方法

参考 参考2 参考3

1、直接获取

 NSString *version = [UIDevice currentDevice].systemVersion;
if (version.doubleValue >= 9.0) {
    // 针对 9.0 以上的iOS系统进行处理
} else {
    // 针对 9.0 以下的iOS系统进行处理
}
 

2、通过Foundation框架版本号

if (NSFoundationVersionNumber >= NSFoundationVersionNumber_iOS_9_0) {
    // iOS 9.0 以上系统的处理
} else {
    // iOS 9.0 以下系统的处理
}

以上代码中NSFoundationVersionNumber 为宏定义,通过该值可以获取当前系统版本号

3、根据特有的类或方法判断

我们判断系统版本号最主要的目的就是为了确定是否可以使用对应api,那我们可以直接判断是否存在该api来判断版本号。
比如说 UIAlertController 这个类,是iOS 8之后才出现的,用来取代 UIAlertView 和 UIActionsheet 的,如果当前系统没有这个类,说明是低于iOS 8的,可以这么判断:

if (NSClassFromString(@"UIAlertController")) { // 存在这个类
    // iOS 8.0 以上系统的处理
} else {
    // iOS 8.0 以下系统的处理
}

比如 boundingRectWithSize:options:attributes:context: 这个方法是 iOS 7.0 之后才有的,可以这样判断:

if ([@"" respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)]) { // 存在这个方法
    // iOS 7.0 以上系统的处理
} else {
    // iOS 7.0 以下系统的处理
}

4、从xcode9 开始,可以使用@available来判断系统api版本。

	if (@available(iOS 11, *)) {
    // iOS 11 (or newer) ObjC code
} else {
    // iOS 10 or older code
}

UITableView的更多设置

UITableView 会自动添加分割线,我们可以使用如下方法取消:

_contentTableView.separatorStyle = NO;

UITableView 的每一项默认情况下点击是会被选中的,可以通过如下方法取消备选中的状态:

[tableView deselectRowAtIndexPath:indexPath animated:YES];

一般与代理UITableViewDelegate代理的-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 方法配合使用:

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

后记

世上最不缺的就是不断试探你的底线还总是以为你是sb的sb。