代码之家  ›  专栏  ›  技术社区  ›  Gil Sand

点击单元格按钮获取表视图行

  •  0
  • Gil Sand  · 技术社区  · 10 年前

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

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

    此按钮仅用于:

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

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

    下面是一个例子,它们都非常相似,开始segue序列:

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

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

    -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
    
            selectedMeeting = [_nextMeetingsArray objectAtIndex:indexPath.row];
    }
    

    segue发送 选定的会议 到下一个控制器。

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

    我尝试向viewEvent方法添加参数,使其看起来像 -(void)viewEvent:(int)index:(UIButton*)sender; 但它在 @selector(viewEvent:) .

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

    两者看起来都“太复杂了”,而不是简单的事情。我很肯定任何一个有经验的程序员都会有一个我还没有学会的简单答案,我宁愿要求它,也不愿意实现比它更重的东西。

    此外,如果你对我的做法有任何评论/批评,我会洗耳恭听:)

    感谢你们的时间,一如既往,我非常感激。

    编辑:

    cellForRow方法:

    注意:我删除了所有与标签相关的内容。因为我有不同的按钮,所以有多个if{}语句,但它们在我看来没有任何影响。此外,该单元基于标签为228的故事板单元;创建后,将设置一个新标记,这样它就不会产生影响。此外,我在tableview中最多有50个项目(从webservice设置),因此索引路径无法达到>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;
    
    1 回复  |  直到 10 年前
        1
  •  2
  •   Gil Sand    10 年前

    在cellForRowAtIndexPath()方法中,将标记作为indexpath.row添加到按钮。然后在selector方法中获取sender标记。然后传入

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

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