首页 > 代码库 > 开发进阶14_UITableView单行显示
开发进阶14_UITableView单行显示
@interface ViewController () <UITableViewDataSource, UITableViewDelegate>
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
#pragma mark - 一共一组
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
#pragma mark - 这一组里面有多少行
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 9;
}
#pragma mark - 返回第indexPath这行对应的内容
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
/*
Default:不显示detailTextLabel
Value1:在右边显示detailTextLabel
Value2:不显示图片,显示detailTextLabel
Subtitle:在底部显示detailTextLabel
*/
UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:nil];
cell.textLabel.text = [NSString stringWithFormat:@"产品-%ld",indexPath.row];
//设置详情文字
cell.detailTextLabel.text = [NSString stringWithFormat:@"产品-%ld好啊!!!!",indexPath.row];
//设置图片
NSString *imageName = [NSString stringWithFormat:@"00%ld.png",indexPath.row + 1];
cell.imageView.image = [UIImage imageNamed:imageName];
//设置右边的小图标
//大于号图标
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
//没有图标
cell.accessoryType = UITableViewCellAccessoryNone;
//钩号图标
cell.accessoryType = UITableViewCellAccessoryCheckmark;
//圆圈中有个i的图标
cell.accessoryType = UITableViewCellAccessoryDetailButton;
//大于号图标和圆圈中有个i的图标组合
cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
//设置最右边显示什么控件
cell.accessoryView = [UIButton buttonWithType:UIButtonTypeContactAdd];
return cell;
}
#pragma mark - 代理方法
#pragma mark 返回indexPath这行cell的高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 70;
}
@end
@interface Product : UIView
//名称
@property (nonatomic, copy) NSString *name;
//描述
@property (nonatomic, copy) NSString *desc;
//图标
@property (nonatomic, copy) NSString *icon;
+ (id)shopWithName:(NSString *)name icon:(NSString *)icon desc:(NSString *)desc;
@end
+ (id)shopWithName:(NSString *)name icon:(NSString *)icon desc:(NSString *)desc
{
Product *shop = [[Product alloc] init];
shop.name = name;
shop.desc = desc;
shop.icon = icon;
return shop;
}
#import "ViewController.h"
#import "Product.h"
@interface ViewController () <UITableViewDataSource, UITableViewDelegate,UIAlertViewDelegate>
{
NSMutableArray *_allShop;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//创建数组
_allShop = [NSMutableArray array];
//创建数据
Product *shop1 = [Product shopWithName:@"图书/音像" icon:@"001.png" desc:@"小说、情感、卡拉OK"];
Product *shop2 = [Product shopWithName:@"母婴用品" icon:@"002.png" desc:@"奶粉!!!!"];
Product *shop3 = [Product shopWithName:@"玩具" icon:@"003.png" desc:@"汽车、飞机、轮船"];
[_allShop addObjectsFromArray:@[shop1,shop2,shop3]];
//添加其他假数据
for (int i = 0; i < 20; i++) {
NSString *name = [NSString stringWithFormat:@"随机产品- %d",i];
NSString *desc = [NSString stringWithFormat:@"%@--好好",name];
NSString *icon = [NSString stringWithFormat:@"00%d.png",(i % 9) + 1];
Product *shop = [Product shopWithName:name icon:icon desc:desc];
[_allShop addObject:shop];
}
}
#pragma mark - 一共一组
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
#pragma mark - 这一组里面有多少行
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return _allShop.count;
}
#pragma mark - 返回第indexPath这行对应的内容
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:nil];
//获取这一行的产品
Product *shop = _allShop[indexPath.row];
cell.textLabel.text = shop.name;
//设置详情文字
cell.detailTextLabel.text = shop.desc;
//设置图片
cell.imageView.image = [UIImage imageNamed:shop.icon];
//设置最右边显示什么控件
cell.accessoryView = [UIButton buttonWithType:UIButtonTypeContactAdd];
return cell;
}
#pragma mark - 代理方法
#pragma mark 选中某一行的cell就会调用
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//取出所点击这行的产品对象
Product *shop = _allShop[indexPath.row];
//1.创建弹框
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"产品展示" message:nil delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
//设置样式(一个明文文本框)
alert.alertViewStyle = UIAlertViewStylePlainTextInput;
//设置文本框默认位置
[alert textFieldAtIndex:0].text = shop.name;
//2.显示弹框
[alert show];
//3.绑定行号为alertview的tag
alert.tag = indexPath.row;
}
两个方法之间的关联是:先调用tableView:didSelectRowAtIndexPath:,在这个方法中,给UIAlertView的tag赋值为修改的行号,然后再alertView:clickedButtonAtIndex:方法中就可以直接使用了
#pragma mark - alertView的代理方法
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if(buttonIndex == 0) return;
//1.取出文本框文字
NSString *text = [alertView textFieldAtIndex:0].text;
//2.将文字更新到对应的cell上面去
Product *shop = _allShop[alertView.tag];
shop.name = text;
//3.刷新表格
/*
重新向数据源索取数据
重新向数据源发送消息
重新调用数据源的方法,根据返回值决定显示什么数据
*/
//整体刷新
[_tableView reloadData];
//局部刷新
//刷新第inSection组的第indexPathForRow行
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:alertView.tag inSection:0];
NSArray *paths = @[indexPath];
//刷新哪一行,使用什么样的动画
[_tableView reloadRowsAtIndexPaths:paths withRowAnimation:UITableViewRowAnimationLeft];
}
@end
开发进阶14_UITableView单行显示