UITableView
内UIViewController
UITableViewDelegate
采用UITableViewDataSource
& numberOfRowsInSection
协议。已实施cellForRowAtIndexPath
和didHighlightRowAtIndexPath
。
dataSource&在故事板中委派。为TableView选择单一选择。选中触摸显示选择。
我在模拟器上运行项目,触摸表格单元格,进行didSelectRowAtIndexPath
调用,但永远不会调用willSelectRowAtIndexPath
或@interface TestViewController : ViewController <UITableViewDelegate, UITableViewDataSource>
。
我忘记了什么?什么能以这种方式影响TableView?
P.S。我知道,有很多这样的问题,但我花了几个小时谷歌搜索和阅读stackoverflow仍然没有解决我的问题。
TestViewController.h:
@end
@interface TestViewController ()
@property (strong) IBOutlet UITableView *tableView;
@end
@implementation TestViewController
- (void)viewDidLoad
{
[super viewDidLoad];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"selected");
}
- (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"highlighted");
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 2;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 10;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"FilterCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
cell.textLabel.text = @"some text";
return cell;
}
@end
TestViewController.m:
{{1}}
答案 0 :(得分:14)
很难说没有看到代码,但试试这个:
1)didSelectRowAtIndexPath
来自UITableViewDelegate
,非dataSource ,您是否已将其连接?!
2)仔细检查didSelectRowAtIndexPath
的签名。从一些可信来源复制粘贴它。也许有些错误。
3)确保插座连接正确。使用调试器将其停在某处,例如viewDidLoad
并打印dataSource&amp;委托(po self.tableView.dataSource
调试器命令),确保它们指向正确的对象。
4)是否可以直观地选择行?也许你在代码或故事板中将cell.userInteractionEnabled
设置为NO?
5)表视图在storyboard中有一个选择属性:(可以吗?)
6)也许您的表格处于编辑模式?从调试中记录下来以查看。
7)从indexPathsForSelectedRows
方法的角度选择行吗?如果覆盖并记录对单元格的selected
访问者的调用?
答案 1 :(得分:3)
我知道了。问题出现在项目使用的库中。
我的ViewController继承自库的ViewController实现,它捕获了所有的手势。