怎么从tableview向自定义ios cell传值中传值

扫二维码下载作业帮
1.75亿学生的选择
下载作业帮安装包
扫二维码下载作业帮
1.75亿学生的选择
xcode怎么在tableview中插入一个新的cell,不想采用改变数据源的方法,点击cell,然后会插入一条新的cell
■暗灵团■0067
扫二维码下载作业帮
1.75亿学生的选择
UITableView 有一个方法,叫做- (void)insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)indexPaths是一个数组,里面装的是NSIndexPath,就是指插入的位置,animation是BOOL值,是否要动画效果.
为您推荐:
其他类似问题
扫描下载二维码UITableView的基本使用三(自定义Cell) - 推酷
UITableView的基本使用三(自定义Cell)
在项目中,我们经常会使用UITableView,但是tableView中的cell格式又不一定每次都是一样的,所以我们需要自己实现我们自定义的cell,而自定义cell的方式也由很多,我们先采取用Xib的方式。
1.通过xib创建一个cell,并且通过tag来获取cell上的其他子元素,这种方式会产生很多的tag,让tag都暴漏在控制器中,不方便管理,而且
viewWithTag
,每次使用的时候,
会遍历所有
部分代码:
// tag比较多不容易管理
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString * ID=@&CELL&;
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:ID];
if (cell==nil) {
// cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:ID];
//通过xib文件加载cell
cell= [[[NSBundle mainBundle] loadNibNamed:@&BookCell& owner:nil options:nil] lastObject];
//绑定监听器
UIButton *cool=(UIButton *)[cell viewWithTag:3];
[cool addTarget:self action:@selector(coolectBook:event:) forControlEvents:UIControlEventTouchUpInside];
//覆盖shuj
Book *book=self.books[indexPath.row];
//拿出第一个cell
UILabel *nameLable=(UILabel *)[cell viewWithTag:1];
nameLable.text=book.
UILabel *priceLable=(UILabel *)[cell viewWithTag:2];
priceLable.text=[NSString stringWithFormat:@&¥%.1f&,book.price];
NSLog(@&%p&,cell);
通过触控点的位置获取所在行
//根据位置获取所在的行
-(void)coolectBook:(UIButton *)btn event:(UIEvent *)event //包含所有的触摸点
UITableView *tableView=(UITableView *)self.
NSSet *touches = [event allTouches]; //包含所有的uitouch 单点触控就只有一个uitouch
UITouch *touch= [touches anyObject];
//获取触摸点在uitableVIEW上的位置
CGPoint p=[touch locationInView:tableView];
NSIndexPath *path= [tableView indexPathForRowAtPoint:p];
Book *book=self.books[path.row];
NSLog(@&row--%@&,book.name);
loadNibNamed加载xib文件的时候把控制器传入
owner,让xib的file's owner的custom class为控制器,也就是控制器充当监听器,这样控制器就可以监听到自定义cell的方法,这样做,耦合度比较高,不利于维护和扩展,自定义的cell只能被一个控制器使用。
部分代码:
NSArray *objs= [[NSBundle mainBundle] loadNibNamed:@&BookCell& owner:self options:nil] ;
3.我们自己以面向对象的方式,把关于自定义cell的所有的元素都封装在一个类里面,写一个子类继承自
UITableViewCell,并把xib创建的cell的custom class改为子类的名称,这样我们加载xib生成的cell对象就是我们的子类对象。
封装的子类cell
#import &UIKit/UIKit.h&
把一个cell上的元素封装在一个整体
只提供get方法
@interface BookCell : UITableViewCell
@property (weak, nonatomic,readonly) IBOutlet UILabel *nameL
@property (weak, nonatomic,readonly) IBOutlet UILabel *priceL
@property (weak, nonatomic,readonly) IBOutlet UIButton *BuyB
注意:这里我们要使用readonly让外界只能访问我们内部的组件。
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString * ID=@&CELL&;
BookCell *cell=[tableView dequeueReusableCellWithIdentifier:ID];
if (cell==nil) {
// cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:ID];
//通过xib文件加载cell
NSArray *objs= [[NSBundle mainBundle] loadNibNamed:@&BookCell& owner:self options:nil] ;
NSLog(@&%@&,[objs lastObject]);
cell=[objs lastObject];
//绑定监听器
//为子类的btn对象绑定事件
[cell.BuyBtn addTarget:self action:@selector(buyBook) forControlEvents:UIControlEventTouchUpInside];
//覆盖数据
Book *book=self.books[indexPath.row];
cell.nameLable.text=book.
cell.priceLable.text=[NSString stringWithFormat:@&%.1f&,book.price];
通过这种方式,我们自定义的cell很灵活,就像一个插件一样,如果其他地方要使用,只用导入我们的.h文件就可以了。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致2015年5月 移动开发大版内专家分月排行榜第一2015年4月 移动开发大版内专家分月排行榜第一2014年9月 移动开发大版内专家分月排行榜第一
2015年3月 移动开发大版内专家分月排行榜第二2014年8月 移动开发大版内专家分月排行榜第二
2015年4月 移动开发大版内专家分月排行榜第二
2015年5月 移动开发大版内专家分月排行榜第三2015年3月 移动开发大版内专家分月排行榜第三2014年10月 移动开发大版内专家分月排行榜第三
2015年5月 移动开发大版内专家分月排行榜第一2015年4月 移动开发大版内专家分月排行榜第一2014年9月 移动开发大版内专家分月排行榜第一
2015年3月 移动开发大版内专家分月排行榜第二2014年8月 移动开发大版内专家分月排行榜第二
2015年4月 移动开发大版内专家分月排行榜第二
2015年5月 移动开发大版内专家分月排行榜第三2015年3月 移动开发大版内专家分月排行榜第三2014年10月 移动开发大版内专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。2460人阅读
iOS(129)
自定义cell和控制器之间常用传值方式
1.代理传值(用的多)
在自定义cell的.h文件中制定协议,例:
@class OtherTableViewC
@protocol OtherTableViewCellDelegate &NSObject&
- (void)otherTableViewCell:(OtherTableViewCell *)tableViewCell clickDeleteButton:(UIButton *)
并且声明一个属性
@property(nonatomic,weak)id&OtherTableViewCellDelegate&
在自定义cell的.m文件中
#pragma mark - click delete button
- (void)clickDeleteButton:(UIButton *)sender
& & if ([_delagate respondsToSelector:@selector(otherTableViewCell:clickDeleteButton:)]) {
& & & & [_delagate otherTableViewCell:self clickDeleteButton:sender];
在控制器中,遵守该协议,实现协议方法
#pragma mark - OtherTableViewCellDelegate (click deleteButton)
- (void)otherTableViewCell:(OtherTableViewCell *)tableViewCell clickDeleteButton:(UIButton *)sender
& & //coding
2.block传值
在自定义cell的.h文件中声明block
typedef void (^DeleteButtonBlock) (UIButton *);
@property (nonatomic,copy) DeleteButtonBlock deleteButtonB
在自定义cell的.m文件中
#pragma mark - click delete button
- (void)clickDeleteButton:(UIButton *)sender
& & if (_deleteButtonBlock) {
& & & & _deleteButtonBlock(sender);
在控制器中
__block ActivityDetailViewController* activityDetailViewController =
_activityDetailTopCell.deleteButtonBlock = ^(UIButton *button) {
& & //coding
3.通知传值
[[NSNotificationCenter defaultCenter] postNotificationName:@&kNotify_Refresh_Comment object&:nil userInfo:@{@&data&:data}];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationReceived) name:@&kNotify_Refresh_Comment object& object:nil];
-(void)notificationReceived
& & //coding
-(void)dealloc
& & [[NSNotificationCenter defaultCenter] removeObserver:self];
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:137513次
积分:3051
积分:3051
排名:第10157名
原创:161篇
转载:27篇
评论:25条
文章:45篇
阅读:29194
文章:41篇
阅读:42374
文章:16篇
阅读:4549

我要回帖

更多关于 ios 点击cell跳转传值 的文章

 

随机推荐