繁体   English   中英

在单元格按钮水龙头上获取tableview行

[英]Get tableview row on cell button tap

我有一个带有单元格的表格视图(不是自定义的),每个单元格都有一个按钮(除其他外)。

根据单元格的不同,创建的按钮也不同。 我有3种不同类型的单元格/按钮,评分/查看/编辑(我不确定这是否完全相关)

此按钮仅用于此目的:

[button addTarget:self action:@selector(rateEvent:) forControlEvents:UIControlEventTouchUpInside];

每个按钮(rateEvent,viewEvent,editEvent)的选择器都不同。

这是一个示例,它们都非常相似,并开始了序列3:

- (IBAction)viewEvent:(UIButton*)sender
{
    [self performSegueWithIdentifier:@"fromHomeToDetails" sender:self];
}

我的didSelectedRowAtIndexPath将会议的详细信息保存在selectedMeeting对象中。

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

        selectedMeeting = [_nextMeetingsArray objectAtIndex:indexPath.row];
}

segue将selectedMeeting发送到下一个控制器。

我的问题:发送的会议取决于所选的单元格。 这意味着用户必须选择一个单元格,然后点击按钮以在下一页上获得正确的详细信息。 我该怎么做才能获得单元格内轻按按钮的正确索引路径?

我试图将参数添加到viewEvent方法,以使其看起来像-(void)viewEvent:(int)index:(UIButton*)sender; 但在@selector(viewEvent:)

我能想象但不能创建的解决方案是:-设法获取轻击按钮的单元格的索引路径,并以某种方式将其发送到我的viewEvent方法。 -创建一个customCell和/或使用附件,所以我在这里和那里已经读过。 -当我点击按钮时强制选择行,但这还需要知道该行的索引。

对于(应该?)相当简单的东西,两者似乎都“太复杂了”。 我敢肯定,任何有经验的程序员都会有一个显而易见的简单答案,而我还没有学到,我宁愿要求它,也不愿实现比应有的沉重负担。

另外,如果您对我的操作方式有任何评论/批评,那么我无不为之倾心:)

谢谢您的宝贵时间,一如既往,我非常感谢。

编辑:

cellForRow方法:

注意:我删除了所有与标签有关的内容。 因为我有不同的按钮,所以有多个if {}语句,但是在我看来它们没有任何影响。 同样,该单元基于带有228标签的故事板单元; 创建后,将设置一个新标签,以使其不受影响。 另外,我在tableview(从webservice设置)中有50个项目的上限,因此indexpath不会达到> 50。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

UITableViewCell *nextCell = [self.tbvNextMeetings dequeueReusableCellWithIdentifier:@"tbNextCell" forIndexPath:indexPath];
UIButton *bt= (UIButton*) [nextCell viewWithTag:228];
[bt setTitle:@"Edit" forState:UIControlStateNormal];
[bt addTarget:self action:@selector(editEvent:) forControlEvents:UIControlEventTouchUpInside];
[bt setTag:indexPath.row];

return nextCell;

在cellForRowAtIndexPath()方法中,将标签添加为按钮的indexpath.row。 然后在选择器方法中获取发件人标记。 并传递

NSIndexPath *path = [NSIndexPath indexPathForRow:sender.tag inSection:yoursection];
UITableViewCell *cell = [tableView cellForRowAtIndexPath:path];

编辑:首先将单元格的标签设置为228,然后将其切换为indexpath的值,则创建失败。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM