以编程方式选择tableview行

4th*_*ace 133 iphone cocoa-touch objective-c uitableview

如何以编程方式选择UITableView

- (void)tableView:(UITableView *)tableView 
        didSelectRowAtIndexPath:(NSIndexPath *)indexPath
Run Code Online (Sandbox Code Playgroud)

被执行?selectRowAtIndexPath只会突出显示该行.

Jaa*_*nus 109

参考文件:

调用此方法不会导致委托接收tableView:willSelectRowAtIndexPath:tableView:didSelectRowAtIndexPath:发送消息,也不会UITableViewSelectionDidChangeNotification向观察者发送通知.

我会做的是:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [self doSomethingWithRowAtIndexPath:indexPath];
}
Run Code Online (Sandbox Code Playgroud)

然后,从您想要调用selectRowAtIndexPath的位置,您可以调用doSomethingWithRowAtIndexPath.最重要的是,如果您希望UI反馈发生,您还可以调用selectRowAtIndexPath.

  • 或者,当您以编程方式选择行时,可以调用tableView:didSelectRowAtIndexPath:您自己(在您作为委托连接的类中). (4认同)
  • 这个方法对我来说似乎是一个黑客,它确实完成了工作,但我认为应该有更好的方法. (3认同)

dul*_*gan 108

像Jaanus告诉的那样:

调用此方法(-selectRowAtIndexPath:animated:scrollPosition :)方法不会导致委托接收tableView:willSelectRowAtIndexPath:或tableView:didSelectRowAtIndexPath:message,也不会向观察者发送UITableViewSelectionDidChangeNotification通知.

所以你只需要自己调用这个delegate方法.

例如:

Swift 3版本:

let indexPath = IndexPath(row: 0, section: 0);
self.tableView.selectRow(at: indexPath, animated: false, scrollPosition: UITableViewScrollPosition.none)
self.tableView(self.tableView, didSelectRowAt: indexPath)
Run Code Online (Sandbox Code Playgroud)

ObjectiveC版本:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView selectRowAtIndexPath:indexPath 
                            animated:YES 
                      scrollPosition:UITableViewScrollPositionNone];
[self tableView:self.tableView didSelectRowAtIndexPath:indexPath];
Run Code Online (Sandbox Code Playgroud)

Swift 2.3版本:

 let indexPath = NSIndexPath(forRow: 0, inSection: 0);
 self.tableView.selectRowAtIndexPath(indexPath, animated: false, scrollPosition: UITableViewScrollPosition.None)
 self.tableView(self.tableView, didSelectRowAtIndexPath: indexPath)
Run Code Online (Sandbox Code Playgroud)


anq*_*anq 63

UITableView的selectRowAtIndexPath:animated:scrollPosition:应该做的伎俩.

只需传递UITableViewScrollPositionNonescrollPosition,用户就不会看到任何动作.


您还应该能够手动运行该操作:

[theTableView.delegate tableView:theTableView didSelectRowAtIndexPath:indexPath]

在你之后selectRowAtIndexPath:animated:scrollPosition:,突出显示以及任何相关的逻辑.

  • 是的,对不起 它说它不会在我发布的文档链接中触发didSelectRowAtIndexPath.我需要学习阅读. (2认同)

Naz*_*zir 21

如果你想选择一行,这将有助于你

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[someTableView selectRowAtIndexPath:indexPath 
                           animated:NO 
                     scrollPosition:UITableViewScrollPositionNone];
Run Code Online (Sandbox Code Playgroud)

这也将突出显示行.委托

 [someTableView.delegate someTableView didSelectRowAtIndexPath:indexPath];
Run Code Online (Sandbox Code Playgroud)


Sou*_*rma 13

Swift 3.0解决方案

选择行

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

DeSelect Row

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