手动调用didSelectRowatIndexPath

joh*_* cs 22 objective-c ios

我试图以编程方式调用didSelectRowAtIndexPath但遇到了麻烦.

[self tableView:playListTbl didSelectRowAtIndexPath:indexPath];
Run Code Online (Sandbox Code Playgroud)

给我以下错误:

使用未声明的标识符'indexPath'; 你是说'NSIndexPath'吗?

有人可以帮帮我吗?谢谢!

编辑:从下面的回答听起来像是我错误的方式.按下按钮时,如何获取所选项目的文本(可以是多个选项)?我需要在专用于按钮的功能中执行此操作.

Car*_*zey 44

您需要传递一个有效的参数,如果您尚未indexPath在调用范围中声明,那么您将收到该错误.尝试:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:ROW_YOU_WANT_TO_SELECT inSection:SECTION_YOU_WANT_TO_SELECT]
[self tableView:playListTbl didSelectRowAtIndexPath:indexPath];
Run Code Online (Sandbox Code Playgroud)

在哪里ROW_YOU_WANT...替换您想要选择的行和部分.

但是,你真的不应该直接调用它.将内部完成的工作提取tableView:didSelectRowAtIndexPath:到单独的方法中并直接调用它们.

要解决更新的问题,您需要使用该indexPathsForSelectedRows方法UITableView.想象一下,您正在从一组字符串数组中填充表格单元格文本,如下所示:

- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        UITableViewCell *cell = [tv dequeue...];
        NSArray *rowsForSection = self.sectionsArray[indexPath.section];
        NSString *textForRow = rowsForSection[indexPath.row];
        cell.textLabel.text = textForRow;
        return cell;
    }
Run Code Online (Sandbox Code Playgroud)

然后,要获取所有选定的文本,您需要执行以下操作:

NSArray *selectedIndexPaths = [self.tableView indexPathsForSelectedRows];
NSMutableArray *selectedTexts = [NSMutableArray array];
for (NSIndexPath *indexPath in selectedIndexPaths) {
    NSArray *section = self.sectionsArray[indexPath.section];
    NSString *text = section[indexPath.row];
    [selectedTexts addObject:text];
}
Run Code Online (Sandbox Code Playgroud)

selectedTexts那时候会包含所有选定的信息.希望这个例子有意义.


Sou*_*rma 28

Swift 3.0解决方案

手动调用didSelectRowAtIndexPath

let indexPath = IndexPath(row: 7, section: 0)
tblView.selectRow(at: indexPath, animated: true)
tblView.delegate?.tableView!(tblView, didSelectRowAt: indexPath)
Run Code Online (Sandbox Code Playgroud)


Mis*_*lis 6

只是为了更新@Sourabh的答案,请注意,您scrollPosition在致电时也可以提供一个selectRow

let indexPath = IndexPath(row: 7, section: 0)
tblView.selectRow(at: indexPath, animated: true)
tblView.delegate?.tableView!(tblView, didSelectRowAt: indexPath)
Run Code Online (Sandbox Code Playgroud)

成为:

let indexPath = IndexPath(row: 7, section: 0)
tblView.selectRow(at: indexPath, animated: true, scrollPosition: top) // <--
tblView.delegate?.tableView!(tblView, didSelectRowAt: indexPath)
Run Code Online (Sandbox Code Playgroud)

可能的常量是:

none

表格视图以最小的移动量滚动了感兴趣的行,使其完全可见。如果该行已经完全可见,则不会发生滚动。例如,如果该行在可见区域的上方,则其行为与top指定的行为相同。这是默认值。

top

表格视图将感兴趣的行滚动到可见表格视图的顶部。

middle

表格视图将感兴趣的行滚动到可见表格视图的中间。

bottom

表格视图将感兴趣的行滚动到可见表格视图的底部。