UITableView 行持久性 - 为什么“didSelectRowAtIndexPath”不存在?碰撞
我有一个 UITableView
将选定的行存储在用户默认值中。 tableView
是菜单结构的一部分,可以在应用程序的生命周期内重新加载,因此我希望在加载之间保持持久性。在 viewDidLoad 中,会检查此 UserDefault 是否存在,并且我称
NSIndexPath *path = [NSIndexPath indexPathForRow:row inSection:0];
[self.tableView selectRowAtIndexPath:path animated:NO scrollPosition:(UITableViewScrollPositionMiddle)];
这工作正常,正如预期的那样。然而,它实际上并没有选择该行,它只是突出显示它。如果我随后调用,
[self tableView:self.tableView didSelectRowAtIndexPath:path];
我会遇到崩溃 - “无法识别的选择器发送到实例”。为什么?
I have a UITableView
that stores the selected row in User Defaults. The tableView
is part of a menu structure that may be reloaded during the lifetime of the application, hence I want the persistence between loads. In viewDidLoad
, this UserDefault
is checked for existence, and I call
NSIndexPath *path = [NSIndexPath indexPathForRow:row inSection:0];
[self.tableView selectRowAtIndexPath:path animated:NO scrollPosition:(UITableViewScrollPositionMiddle)];
This works fine, as expected. However, it doesn't actually select the row, it just highlight's it. If I subsequently call
[self tableView:self.tableView didSelectRowAtIndexPath:path];
I get a crash - "unrecognised selector sent to instance". Why?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
[self tableView:self.tableView didDeselectRowAtIndexPath:path]
将调用取消选择方法的YOUR 实现(在 UITableViewDelegate 中定义)。由于您没有在委托中实现它,因此您会崩溃。
您应该致电:
[self.tableView deselectRowAtIndexPath:路径动画:NO];
[self tableView:self.tableView didDeselectRowAtIndexPath:path]
will call YOUR implementation of the deselection method (which is defined in UITableViewDelegate).You get a crash since you didn't implement it in your delegate.
You should call:
[self.tableView deselectRowAtIndexPath:path animated:NO];
UITableView 通过两个委托协议工作, UITableViewDelegate< /a> 和 UITableViewDataSource。定义 UITableView 的类应该实现这些协议,并且您应该将 UITableView 的委托和数据源设置为“self”。您不应该直接调用协议方法,这很可能是导致崩溃的原因。
为了根据您的数据模型(用户默认)选择特定行,您需要设置 UITableViewCell 在 tableView:cellForRowAtIndexPath: 中为正在呈现的行选择属性为“YES”。
我建议您阅读本教程以帮助您更好地理解 UITableView。
http://www.iosdevnotes.com/2011/10/uitableview-tutorial/
The UITableView works via two delegate protocols, UITableViewDelegate and UITableViewDataSource. The class that defines your UITableView should implement these protocols and you should set the delegate and datasource of the UITableView to "self". You should not call the protocol methods directly which is most likely the reason for your crash.
In order to select a particular row based on your data model (User Default), you will need to set the UITableViewCell selected property to "YES" in the tableView:cellForRowAtIndexPath: for the row that is being rendered.
I recommend going through this tutorial to help you understand UITableView's better.
http://www.iosdevnotes.com/2011/10/uitableview-tutorial/