因此,我在UITableViewController
中添加了UITableViewCell
和UIViewController
,而cellForRowAtIndexPath
委托方法有效,didSelectRowAtIndexPath
则不然。有没有人有任何想法?
编辑2:UITableView
的代表设置为UIViewController
。
编辑3:我在另一个堆栈问题here上找到了我的问题的答案。基本上我的UITap...
上[self view]
阻止了didSelectRow...
。我不知道为什么tap会阻止委托方法,我也不知道如何让tap和table同时工作。
编辑:让我烦恼的部分是我已经在早期的应用程序上运行了这个确切的设置。所以这意味着我错过了一路上的一步。问题是,我已经梳理了所有的步骤,并比较了之前的应用程序与当前的应用程序,我真的不知道我错过了什么。
我已经将记录添加到两个委托方法中,而另一个输出,另一个则没有。
ViewController.h
#import "...TableViewCell.h"
...
UITableViewDataSource,
UITableViewDelegate
...
ViewController.m
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"cellForRowAtIndexPath");
...
return Cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"didSelectRowAtIndexPath");
}
... TableViewCell.h(内容不重要)
... TableViewCell.m(内容不重要)
答案 0 :(得分:2)
我在another StackOverflow question找到了答案。
我已将UITapGestureRecognizer
添加到我注释掉的[self view]
,然后委托方法有效。
任何人都可以告诉我为什么这有效,以及我如何让UITapGestureRecognizer
在与UITableView
相同的屏幕上工作?
// Hide keyboard when user taps outside of it
UITapGestureRecognizer *tapGestureRecognizer =
[[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(hideKeyboardOnTap)];
//[[self view] addGestureRecognizer:tapGestureRecognizer];
UITapeGestureRecognizer
到UITapGestureRecognizer
答案 1 :(得分:1)
您是否设置了tableView
的代表?
myTableView.delegate = self;
编辑:我的不好,没有看到正在调用行的单元格。
您说您使用了自定义tableViewController
。如果您覆盖了didSelectRowAtIndexPath
方法,那么在[super didSelectRowAtIndexPath:]
tableViewController
可能很重要
编辑2:还有一件事。我不知道这个的原因,但是我在viewController
的某个时候遇到了同样的问题。我通过在同一didDeselectRowAtIndexPath
中添加viewController
的空实现来解决此问题。尝试将其添加到您的表的delegate
控制器。
答案 2 :(得分:0)
回答问题"我如何让UITapGestureRecognizer在与UITableView相同的屏幕上工作&#34 ;;
你应该"告知"您的GestureRecognizer,其他识别器可以处理相同的手势:
您可以通过实施UIGestureRecognizerDelegate
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
这是一个小例子......
@interface MyController : UIViewController<UIGestureRecognizerDelegate>
{
}
@end
-(void)viewDidLoad
{
UITapGestureRecognizer *gr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(actionOnTapGesture:)];
[gr setNumberOfTapsRequired:1];
[gr setDelegate:self];
[self.view addGestureRecognizer:gr];
}
-(BOOL) gestureRecognizer:(UIGestureRecognizer *) gestureRecognizer shouldRecognizeSimultaneouslyGestureRecognizer:(UIGestureRecognizer *) otherGestureRecognizer
{
return YES;
}
答案 3 :(得分:0)
如果属性选择设置为“无选择”,请检查界面构建器。 根据您的需要将其更改为“单选”或其他选项。
这可能是 didSelect 没有被触发的原因。