接着来深入学习UITableView,
UITableView的数据源是NSMutableArray的对象_infoArray,现在数组的内容为{@"Zero",@"One",@"Two",@"Three",@"Four"},如果数组的内容增加了,该怎样刷新UITableView界面的内容呢?答案是通过reloadData方法,下面我就来模拟一个场景,点击导航栏右侧的ButtonItem,向可变数组_infoArray中随机不重复地添加0~99之间的数字,那么代码这样写吧。
我需要一个存放了0~99的数字的数组,我这样实例化该数组,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | @interface RootViewController ()<UITableViewDelegate,UITableViewDataSource> { NSMutableArray *_infoArray; //UITableView数据源 NSArray *_numberArray; //存放数字的数组 } - ( void )viewDidLoad { [super viewDidLoad]; //初始化_numberArray数组,并且将0~99数字转换为NSNumber对象添加进入该数组 _numberArray = [[NSMutableArray alloc] initWithCapacity:3]; for ( int i = 0;i < 100;i++) { NSNumber *tempNumber = [NSNumber numberWithInt:i]; [_numberArray addObject:tempNumber]; } //初始化TableView数据源 _infoArray = [[NSMutableArray alloc] initWithCapacity:3]; //设置导航栏右侧的按钮,并且绑定点击事件-addNumber UIBarButtonItem *rightItem = [[UIBarButtonItem alloc] initWithTitle:@ "Add" style:UIBarButtonItemStylePlain target:self action:@selector(addNumber:)]; self.navigationItem.rightBarButtonItem = rightItem; } |
导航栏按钮绑定的-addNumber方法实现
1 2 3 4 5 6 7 8 9 10 11 | - ( void )addNumber { int count = ( int )[_numberArray count]; //0~count随机数 int randomIndex = rand ()%count; NSNumber *tempNumber = [_numberArray objectAtIndex:randomIndex]; [_infoArray addObject:tempNumber]; [_numberArray removeObject:tempNumber]; //调用TableView的reloadData刷新界面 [self.theTableView reloadData]; } |
上面的代码大家应该能够看懂吧,就是随机获取_numberArray中的元素,将其加入UITableView数据源_infoArray中,并且再将其从_numberArray中删除,防止重复添加相同元素,当然上面的代码比较暴力,很多情况没考虑,这里只是测试,不要在意这些细节。
TableView刷新界面的时候会执行-tableView:cellForRowAtIndexPath方法,
1 2 3 4 5 6 7 | - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { //省略不相干代码 //.... cell.textLabel.text = [NSString stringWithFormat:@ "%@" ,[_infoArray objectAtIndex:indexPath.row]]; //....不相干代码 } |
这样的话就每添加一个元素,就通过reloadData刷新一下界面,显示新增加的内容。
,我将介绍带动画刷新界面的insertRow语法。