我正在选项卡视图中编写一个带有表格视图的iOS应用程序.在我UITableViewController,我实现了-tableView:didSelectRowAtIndexPath:,但是当我在运行时选择一行时,该方法没有被调用.正在填充表视图,所以我知道我的控制器中正在调用其他tableView方法.
有没有人有任何想法,我可能搞砸了,以实现这一目标?
我有一个UITableView作为我的子视图UIScrollVIew,这是我控制的主视图MainViewController.
在MainViewController.h中
@interface MainViewController : UIViewController <UIGestureRecognizerDelegate, UITableViewDelegate, UITableViewDataSource>
// other stuff here...
@property (weak, nonatomic) IBOutlet UITableView *myTableView;
Run Code Online (Sandbox Code Playgroud)
在MainViewController.m中
@synthesize myTableView;
// other stuff here...
- (void)viewDidLoad {
myTableView.delegate = self;
myTableView.datasource = self;
}
// other stuff here...
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath: (NSIndexPath *)indexPath {
[self performSegueWithIdentifier:@"listAttributesSegue" sender:self];
}
Run Code Online (Sandbox Code Playgroud)
我知道didSelectRowAtIndexPath没有被调用,因为我已经在方法本身和它内部的代码行上设置了断点,并且都没有被调用.我也知道数据源工作正常,因为我有其他功能可以在运行时修改单元格,并且它们工作正常.我使用最新的Xcode和iOS 5.0设置作为开发目标.我搜索并搜索了一个答案.有人有主意吗?
编辑:
我找到了答案.我UITapGestureRecognizer有一套myTableView的superView.这超出了选择呼叫.相信任何人都认为可能是它.在我将其标记为正确之前,您的答案已被删除.
编辑2:
很多人一直在评论这个,所以我会分享它.如果您遇到此问题,只需设置myGestureRecognizer.cancelsTouchInView为false,一切都应该正常工作.
我们的Swift 3迁移之后会发生一些非常奇怪的事情.我们有两个视图控制器,它们都实现,UITableViewDelegate并且它们都实现public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
但是只在其中一个中调用实际方法.
如果我在一个不工作改变public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)到public func tableView(_ tableView: UITableView, didSelectRowAtIndexPath: IndexPath)(注意雨燕2.2的签名),那么他们都工作.
两个视图控制器都是Swift类,所以我不确定到底发生了什么.我很确定它可能是一个Objective-C vs Swift互操作性问题,但我们的整个项目是用Swift编写的,所以这就是为什么很难弄清楚导致这个问题的原因.
任何帮助表示赞赏.谢谢.
我有一个采用&协议的UITableView内部.并实施.UIViewControllerUITableViewDelegateUITableViewDataSourcenumberOfRowsInSectioncellForRowAtIndexPath
在故事板中有dataSource和delegate的出口.为TableView选择单一选择.选中触摸显示选择.
我在模拟器上,触摸表格单元运行项目,得到了didHighlightRowAtIndexPath电话,但 didSelectRowAtIndexPath还是willSelectRowAtIndexPath从来不被称为.
我忘记了什么?什么能以这种方式影响TableView?
PS我知道,有很多这样的问题,但我花了几个小时谷歌搜索和阅读stackoverflow仍然没有解决我的问题.
TestViewController.h:
@interface TestViewController : ViewController <UITableViewDelegate, UITableViewDataSource>
@end
TestViewController.m:
@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 …Run Code Online (Sandbox Code Playgroud) ios ×4
uitableview ×4
cocoa-touch ×1
iphone ×1
objective-c ×1
selection ×1
swift3 ×1
xcode8 ×1