框架中的 UITableViewController 未调用 didSelectRowAtIndexPath

Posted

技术标签:

【中文标题】框架中的 UITableViewController 未调用 didSelectRowAtIndexPath【英文标题】:didSelectRowAtIndexPath not being called by UITableViewController from framework 【发布时间】:2016-03-21 16:05:02 【问题描述】:

我创建了一个包含UITableViewController 的框架。出于某种原因,当我使用这个框架并创建这个 VC 时,它可以完美地加载,并且数据源方法工作得很好,看起来就像它应该的那样。但是,当我单击单元格时,绝对没有任何反应。我知道它应该可以工作,因为当我在框架中使用这个 VC 时,它可以正常工作。

我只是为didSelectRowAtIndexPath 设置了NSLog 语句,但根本没有调用它们。为什么在框架中使用这个 VC 会使 didSelectRowAtIndexPath 不被调用?

编辑:我发现这个问题与我正在使用的 SlidingNavigationController 有关。

具体来说,如果我在applicationDidFinishLaunchingWithOptions 中使用以下代码,那么一切正常:

 NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"Lights" ofType:@"bundle"];
    NSBundle *lights = [NSBundle bundleWithPath:bundlePath];

    UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:lights];
    SlideNavigationController *nc = (SlideNavigationController*)[sb instantiateViewControllerWithIdentifier: @"SlideNavigationController"];
    ViewController *vc = [sb instantiateViewControllerWithIdentifier:@"ViewController"];

    MenuViewController * _mvc = [[MenuViewController alloc] initWithNibName:@"MenuViewController" bundle: lights];
    [SlideNavigationController sharedInstance].leftMenu = _mvc;
    [SlideNavigationController sharedInstance].rightMenu = vc;
    self.window.rootViewController = nc;

但是,如果我在项目的其他任何地方使用相同的代码(例如,VC 中的按钮启动此storyboard 序列),TableView 将无法响应。

将代码放入didFinishLaunching 有什么特别之处?

【问题讨论】:

您是否正在以编程方式创建tableview?你能分享一些代码吗? 你确认 UITableViewDelegate 协议了吗? @casillas @ Md.Muzahidul Islam -- 刚刚添加了代码 您的tableView 存储在MenuViewController 中吗?如果是这样,您的 UITableViewDelegate 方法在哪里实现? 委托方法在 MenuViewController 中。是委托人。 【参考方案1】:

好的,我的回答是如果你的UITableViewDelegate 方法在MenuViewController 中实现,那么删除你下面的代码。

leftMenu.tableView.delegate = self;

在你的MenuViewController 内部告诉你的tableView self 是代表,比如:

// in MenuViewController.m
- (void)viewDidLoad 
    [super viewDidLoad];
    self.tableView.delegate = self;

【讨论】:

是的,已经完成了。我相信我已将问题限制在 SlideNavigationController 上——当我使用常规 NC 时,不会发生此问题。 然后显示您的SlideNavigationController 的实现。它是如何实现的? 您是否会不小心输入didDeselectRowAtIndexPath 而不是didSelectRowAtIndexPath

以上是关于框架中的 UITableViewController 未调用 didSelectRowAtIndexPath的主要内容,如果未能解决你的问题,请参考以下文章

从 xib 调用 viewController

使用导航按钮从 UITableView 中的选中元素返回数据

表格视图不显示单元格中的内容

如何呈现UICollectionViewController?

UIActionSheet 事件未触发

ReloadData (UITableView) 不起作用