您的位置:首页 > 产品设计 > UI/UE

2015/10/4 iOS 笔记 细节 简单-代理过程 UITableView

2015-10-05 01:47 489 查看
一、简单-代理过程

1,创建代理

@class TgFootView;

@protocol TgFootViewDelegate <NSObject>

@optional 可选是否实现

视图的下载按钮被点击

- (void)tgFootViewDidDownloadButtonClick:(TgFootView *)footView;

@end

@interface TgFootView : UIView

代理如果使用强引用,就会产生循环引用,造成控制器和子视图都无法被释放,造成内存泄露。

@property (nonatomic,weak) id <TgFootViewDelegate> delegate;

@end

2,遵守协议

<TgFootViewDelegate>

3,设置代理

视图控制器成为footer的代理

footer.delegate = self;

4,控制器实现代理方法

- (void)tgFootViewDidDownloadButtonClick:(TgFootView *)footView

{

}

5,判断代理是否实现了协议方法

if ([self.delegate respondsToSelector:@selector(tgFootViewDidDownloadButtonClick:)]) {

     执行

[self.delegate tgFootViewDidDownloadButtonClick:self];

}

二、UITableView的几个代理方法

1、 只要实现了此方法,就能够支持手势拖拽删除了,删除需要自己干!

UITableViewCellEditingStyleNone,

UITableViewCellEditingStyleDelete, 删除

UITableViewCellEditingStyleInsert 添加

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath

{

if (editingStyle == UITableViewCellEditingStyleDelete) {

NSLog(@"要删除");

MVC => 数据是保存在模型中

1. 删除self.dataList中indexPath对应的数据

[self.dataList removeObjectAtIndex:indexPath.row];

NSLog(@"%@", self.dataList);

2. 刷新表格(重新加载数据)

重新加载所有数据

[self.tableView reloadData];

deleteRowsAtIndexPaths让表格控件动画删除指定的行

[self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationMiddle];

} else if (editingStyle == UITableViewCellEditingStyleInsert) {

NSLog(@"要添加数据");

1. 向数组添加数据

[self.dataList insertObject:@"王小二" atIndex:indexPath.row + 1];

2. 刷新表格

[self.tableView reloadData];

insertRowsAtIndexPaths让表格控件动画在指定indexPath添加指定行

新建一个indexPath

NSIndexPath *path = [NSIndexPath indexPathForRow:indexPath.row + 1 inSection:indexPath.section];

[self.tableView insertRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationMiddle];

}

}

2、只要实现此方法,就可以显示拖动控件

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath

{

界面数据UITableView已经完成了

调整数据即可

[self.dataList exchangeObjectAtIndex:sourceIndexPath.row withObjectAtIndex:destinationIndexPath.row];

1. 将源从数组中取出

id source = self.dataList[sourceIndexPath.row];

2. 将源从数组中删除

[self.dataList removeObjectAtIndex:sourceIndexPath.row];

NSLog(@"%@", self.dataList);

3. 将源插入到数组中的目标位置

[self.dataList insertObject:source atIndex:destinationIndexPath.row];

NSLog(@"%@", self.dataList);

}

3、 返回编辑样式,如果没有实现此方法,默认都是删除

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath

{

if (indexPath.row % 2) {

return UITableViewCellEditingStyleInsert;

} else {

return UITableViewCellEditingStyleDelete;

}

return UITableViewCellEditingStyleInsert;

}

4,cell被选中或者取消选中时都会被调用

如果是自定义cell控件,所有的子控件都应该添加到contentView中

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {

[super setSelected:selected animated:animated];

// Configure the view for the selected state

if (selected) {

self.contentView.backgroundColor = [UIColor redColor];

} else {

self.contentView.backgroundColor = [UIColor greenColor];

}

}

5, 刷新数据

1, [self.tableView reloadData];

2, 新建一个indexPath

NSIndexPath *path = [NSIndexPath indexPathForRow:self.tgs.count - 1 inSection:0];

添加

[self.tableView insertRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationMiddle];

滚到最后

[self.tableView scrollToRowAtIndexPath:path atScrollPosition:UITableViewScrollPositionBottom animated:YES];

6,

self.tableView.tableHeaderView = [[[NSBundle mainBundle] loadNibNamed:@"HeaderView" owner:nil options:nil] lastObject];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: