大纲
一、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];
平煤 华为