06TableViewController_AttributedString_registerCell_cellMove_NSRange_Notification_systemAndKeyboardNotification

大纲

一、TableViewController
1.1 TableViewController 继承于 UIViewController
可以当做一个自带TableView的ViewController来使用
1.2 UIRefreshControl
只能在TableViewController中使用
步骤:
1.创建
1.1 设置颜色
1.2 添加文字
2.添加事件
3.赋值

     self.refreshControl = refreshControl;

1.3 属性字符串
NSAttributedString
NSMutableAttributedString
作用:设置文字的 大小/颜色/下划线 等属性
方法:setAttributes:Dictionary
二、注册单元格
2.1
方法1:手写tableView
作用:替换alloc方法

     [tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:cellId];

方法2:拖拽tableView
作用:替换[NSBundle MainBundle]方法

  [tableView registerNib:[UINib nibWithNibName:<(nonnull NSString *)> bundle:<(nullable NSBundle *)>] forCellReuseIdentifier:<(nonnull NSString *)>];

2.2 配套使用的出列方法

 dequeueReusableCellWithIdentifier: forIndexPath:

注意:只能使用系统提供的 Default 样式
注意,同时存在以下情况不可使用注册单元格:
1.表中的单元格有多种样式
2.单元格是用xib自定义实现的(xib中有多个cell)
三、单元格移动
步骤:
1.找到要移动的元素
2.将其从数组中移除
3.将其插入目标位置
四、NSRange
NSRange:范围(结构体)
变量1:location 位置
变量2:length 长度
rangeOfString:判断str1中是否包含str2
五、通知
(一)基本概念
本质:消息的转发
特点:一对多。是单例类,即整个应用程序中只有一个实例。
步骤:
1.获取通知中心
2.注册监听者
3.发通知
4.收通知,做反应
(二)多个界面的通知
(三)系统通知
由系统发出,程序员只需监听即可
(四)键盘通知

正文

一、TableViewController
项目:TableViewController0407
1.1 TableViewController 继承于 UIViewController
可以当做一个自带TableView的ViewController来使用
1.2 UIRefreshControl
只能在TableViewController中使用
步骤:
1.创建
1.1 设置颜色
1.2 添加文字
2.添加事件
3.赋值

    self.refreshControl = refreshControl;

1.3 属性字符串

NSAttributedString
NSMutableAttributedString

作用:设置文字的 大小/颜色/下划线 等属性
方法:setAttributes:Dictionary
源码:

- (void)viewDidLoad {
    [super viewDidLoad];
    _array = [[NSMutableArray alloc]initWithObjects:@"1",@"2",@"3",@"4",@"5",@"6", nil];
    //下拉刷新
    //1.创建
    UIRefreshControl *refreshControl = [[UIRefreshControl alloc]init];
    //1.1 设置颜色
    refreshControl.tintColor = [UIColor redColor];
    //1.2 添加文字
    //NSAttributedString:不可变的属性字符串
//    refreshControl.attributedTitle = [[NSAttributedString alloc]initWithString:@"努力加载中..."];
    //①可变属性字符串
    NSMutableAttributedString *mString = [[NSMutableAttributedString alloc]initWithString:@"努力加载中..."];
    //②设置属性
    [mString setAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:22],NSForegroundColorAttributeName:[UIColor redColor],NSUnderlineStyleAttributeName:[NSNumber numberWithInt:1]} range:NSMakeRange(0, 2)];
    //③赋值给title
    refreshControl.attributedTitle = mString;
    //2.添加事件
    [refreshControl addTarget:self action:@selector(refreshData:) forControlEvents:UIControlEventValueChanged];
    //3.赋值
    //系统内部自动添加
    self.refreshControl = refreshControl;
}
#pragma mark - 刷新数据
- (void)refreshData:(UIRefreshControl *)sender
{
    NSString *newData = @"aaa";
    [_array addObject:newData];
    [self performSelector:@selector(end:) withObject:sender afterDelay:1];
}

- (void)end:(UIRefreshControl *)sender
{
    [self.tableView reloadData];
    //结束刷新
    [sender endRefreshing];
}

二、注册单元格
项目:TableView_RegisterCell0407
2.1
方法1:手写tableView
作用:替换alloc方法

     [tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:cellId];

方法2:拖拽tableView
作用:替换[NSBundle MainBundle]方法

  [tableView registerNib:[UINib nibWithNibName:<(nonnull NSString *)> bundle:<(nullable NSBundle *)>] forCellReuseIdentifier:<(nonnull NSString *)>];

2.2 配套使用的出列方法

 dequeueReusableCellWithIdentifier: forIndexPath:

注意:只能使用系统提供的 Default 样式

源码:

//1.注册单元格
    //只能使用系统提供的 Default 样式
    //方法1:手写tableView
    //作用:替换alloc方法
    [tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:cellId];
    //方法2:拖拽tableView
    //作用:替换[NSBundle MainBundle]方法
//    [tableView registerNib:[UINib nibWithNibName:<#(nonnull NSString *)#> bundle:<#(nullable NSBundle *)#>] forCellReuseIdentifier:<#(nonnull NSString *)#>];

//2.此出列方法 与 注册单元格 配套使用
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId forIndexPath:indexPath];
    cell.textLabel.text = [_array objectAtIndex:indexPath.row];
    return cell;
}

注意:同时满足以下条件不可使用注册单元格:
1.表中的单元格有多种样式
2.单元格是用xib自定义实现的(xib中有多个cell)
项目:Register_Nib_MoreCell0407

三、单元格移动
项目:TableView_CellMove0407
步骤:
1.找到要移动的元素
2.将其从数组中移除
3.将其插入目标位置

源码:

//1.进入编辑状态
- (IBAction)moveClick:(UIBarButtonItem *)sender
{
    [_tableView setEditing:!_tableView.editing animated:YES];
}
//2.设置编辑风格
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return UITableViewCellEditingStyleNone;
}
//3.移动
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{
    //sourceIndexPath:要移动的单元格的索引
    //destinationIndexPath:单元格移动后的索引
    //1.先找到要移动的元素
    NSString *data = [_mArray objectAtIndex:sourceIndexPath.row];
    //2.把元素从数组中移除
    [_mArray removeObjectAtIndex:sourceIndexPath.row];
    //3.将找到的元素再次插入到目标位置
    [_mArray insertObject:data atIndex:destinationIndexPath.row];
}

四、NSRange
项目:NSRange0407
NSRange:表示范围的一个结构体
变量1:location 位置
变量2:length 长度
rangeOfString:判断str1中是否包含str2
源码:

 //NSRange:表示范围的一个结构体
    //变量1:location 位置
    //变量2:length 长度
    //作用:
    NSString *str1 = @"今天,中午吃啥?";
    NSString *str2 = @"中午";
    //在str1中查找str2
    NSRange range = [str1 rangeOfString:str2];
    //range(location,length),结论:str1中是否包含str2

五、通知
(一)基本概念
本质:就是消息的转发
特点:一对多,是一个单例类,即整个应用程序中只有一个实例。
步骤:
1.获取通知中心
2.注册监听者
3.发出通知
4.接收通知,做出反应

源码:
文件:ViewController1.m

 //1.获取通知中心
    //单例类:整个应用程序中只有一个实例
    NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
    //2.在通知中心注册一个监听者(在发出通知之前)
    //要接收通知中心发出的消息,就必须有一个监听者
    //addObserver:监听者
    //selector:做出的反应(收到消息后)
    //name:通知的名字(表示监听者只接收“XXX”名字的通知)
    //nil表示任意名字的通知都可以收到
    //object:发出通知的对象(很少用)
    [notificationCenter addObserver:self selector:@selector(changeColor:) name:@"交通广播" object:nil];
}
//4.做出反应
- (void)changeColor:(NSNotification *)notification
{
    NSDictionary *dict = notification.userInfo;
    UIColor *color = [dict objectForKey:@"color"];
    
    self.view.backgroundColor = color;
}

文件:ViewController2.m

//3.发出通知
- (IBAction)postNotification:(UIButton *)sender
{
    NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
    [notificationCenter postNotificationName:@"交通广播" object:nil userInfo:@{@"color":[UIColor yellowColor]}];
}

(二)多个界面的通知
项目:Notification_ChangeColor0407

(三)系统通知
由系统发出,程序员只需要监听即可

AppDelegate.m 中的方法:

applicationWillResignActive:
applicationDidEnterBackground:
applicationWillEnterForeground:
applicationDidBecomeActive:
applicationWillTerminate:

项目:Notification_System0407

    NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
    [center addObserver:self selector:@selector(saveData) name:UIApplicationWillEnterForegroundNotification object:nil];

(四)键盘通知
项目:Notification_Keyboard0407

//1.注册监听者,监听系统发出“键盘位置将要发生改变”的通知
    NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
    [center addObserver:self selector:@selector(changeTextfieldFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];

平煤 华为

你可能感兴趣的:(06TableViewController_AttributedString_registerCell_cellMove_NSRange_Notification_systemAndKeyboardNotification)