• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - Objective-C 将 tableView indexPath 传递给另一个方法

[复制链接]
菜鸟教程小白 发表于 2022-12-13 13:37:13 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我这里有这个 cellForRowAtIndexPath 方法:

- (UITableViewCell *)tableViewUITableView *)tableView cellForRowAtIndexPathNSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier"Cell" forIndexPath:indexPath];

    if (cell.accessoryView == nil) {

        cell.accessoryView = [[Checkbox alloc] initWithFrame:CGRectMake(0, 0, 25, 43)];
        cell.accessoryView.opaque = NO;
        cell.backgroundColor = [UIColor clearColor];

        [(Checkbox*)cell.accessoryView addTarget:self actionselector(checkBoxTapped:forEvent forControlEvents:UIControlEventValueChanged];
    }

    NSString *sectionTitle = [contactSectionTitles objectAtIndex:indexPath.section];
    NSArray *sectionContacts = [contactDirectoryFinal objectForKey:sectionTitle];
    NSString *contacts = [[sectionContacts objectAtIndex:indexPath.row] valueForKey"item"];

    cell.textLabel.text = contacts;
    [(Checkbox*)cell.accessoryView setChecked: [[[sectionContacts objectAtIndex:indexPath.row] valueForKey"checkedItem"] boolValue] ];

    return cell;
}

在这个方法里面,我有这行:

[(Checkbox*)cell.accessoryView addTarget:self actionselector(checkBoxTapped:forEvent forControlEvents:UIControlEventValueChanged];

调用这个方法

- (IBAction)checkBoxTappedid)sender forEventUIEvent*)event
{
}

我要做的是调整调用此方法的方式,因此我也传递了 int indexPath.row 编号

我开始这样做了:

[(Checkbox*)cell.accessoryView addTarget:self actionselector(checkBoxTapped:forEvent:rowNumber forControlEvents:UIControlEventValueChanged];

还有这个

- (IBAction)checkBoxTappedid)sender forEventUIEvent*)event rowNumberint)row
{
}

但我是选择器的新手,我的问题是我在哪里传递 rowNumber?



Best Answer-推荐答案


正如您发现的那样,您不能使用选择器传递任何值,只能传递发送者和事件。这就是为什么您需要另一种方式传递行号的原因。

一种方法是使用控件上的 tag 属性并使用 [sender tag] 检索它,但是如果在未调用 cellForRowAtIndexPath 的情况下更改了表索引,则此方法将失败。它也不适用于分段 TableView 。

更可靠的方法是使用 View 的位置来计算正确的行。 UITableView 有一个方便的方法来做到这一点:

- (IBAction)checkBoxTappedid)sender forEventUIEvent*)event {
    CGPoint checkBoxPosition = [sender convertPoint:CGPointZero toView:self.tableView];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:checkBoxPosition];
}

关于ios - Objective-C 将 tableView indexPath 传递给另一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34813538/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap