didSelectRowAtIndexPath不会在ViewController中触发

时间:2013-09-30 00:25:17

标签: ios uitableview didselectrowatindexpath

因此,我在UITableViewController中添加了UITableViewCellUIViewController,而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(内容不重要)

4 个答案:

答案 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];
  • 编辑:更正了UITapeGestureRecognizerUITapGestureRecognizer
  • 的拼写错误

答案 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 没有被触发的原因。