iOS tableview的每个cell中放了一个button,如何才能知道那个button被点击了?

tableview中有N个section,每个section有N个cell,每个cell中有一个button,假如这些button的点击事件都是btnClick,如何能够... tableview中有N个section,每个section有N个cell,每个cell中有一个button,假如这些button的点击事件都是btnClick,如何能够知道哪个button被点击了?最好能通过indexPath这个参数得到。我想到的是重写UIButton,给UIButton一个属性是indexPath,但是实现起来遇到了困难,在网上也没有找到具体的实例,请问有没有更好的办法,或者告诉我具体怎么重写UIButton。 展开
 我来答
叼烟泡小妞
2014-03-08 · TA获得超过236个赞
知道答主
回答量:36
采纳率:0%
帮助的人:19万
展开全部
1 你的想法可以解决问题 自己新建一个类 继承UIButton 里面加个属性 int就行 然后设置cell的时候 让这个int等于 indexPath.row (比较麻烦 需要自定义button 也有可能要自定义cell)
2 给每个button设置一个tag值 就是 indexPath.row+固定常数(实现简单 代码不健壮逻辑复杂了不好处理)
3自定义cell 然后btnClick事件 在cell里处理 生成cell的时候 注入依赖和上下文 如果cell 种类有多个 用工厂模式抽象 需要用协议写接口 还要注意 引用context的时候要区分 weak 和strong (避免循环引用) 如果协议不熟悉 也可以用通知中心回调ViewController (这种方法 对开发者基础要求教高 但是比较推荐 代码健壮 重用性高 封装较好 )
4 用block封装 处理事件 类似方法1 需要重写btn(不推荐 内存占用大 )
还有其他方法 不一一列举了 到底怎么搞 要多动脑 根据实际情况来 IOS的开发是比较自由的 实现一个功能 有很多条路
追问
看了你的回答 我比较喜欢第一种方法或者是第三种方法,但是我在实现的时候都出现了问题,请问你有小例程么  给我发一个看看呗 谢谢啦
健健狂蛋子
2018-05-23
知道答主
回答量:2
采纳率:0%
帮助的人:1836
展开全部
在cell里这样写:
.h
@property (nonatomic,copy) void (^defautBlock)(NSString * string);
@property (weak, nonatomic) IBOutlet UIButton *editButton;
.m
[self.defautButton addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];
-(void)buttonClick:(UIButton *)sender{
self.editBlock(@"ok");
}
控制器里边tableview的cell生成代理方法中这样写
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
cell.editBlock = ^(NSString *string) {
//你要做的事情,注意弱引用,避免循环引用
};
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Forst__Sorrow
2014-03-08
知道答主
回答量:13
采纳率:0%
帮助的人:13.6万
展开全部
上次我一同事好像是将indexPath.row 设置成为button的tag.你可以试试。用代理不符合逻辑。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Getline
2014-03-07 · 科技领域创作者
Getline
采纳数:405 获赞数:2705

向TA提问 私信TA
展开全部
用delegate 可以做到
追问
能说的具体点么,不是太明白
追答
自己定义一个Cell的协议,让tableView controller 去实现这个协议。

cell.delegate = self
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式