【问题标题】:UIPopover with UINavigationController and UITableView: tableView delegates not called带有 UINavigationController 和 UITableView 的 UIPopover:未调用 tableView 委托
【发布时间】:2014-05-25 17:43:58
【问题描述】:

我正在尝试显示一个简单的 iPad 弹出框,其中包含一个带有 tableView 的 navigationController。

popover -> 导航控制器 -> 视图控制器 -> 表格视图。

我确实需要导航控制器,因为在触摸单元格时我想推送另一个视图控制器(在同一个弹出框内)。

没有导航控制器,一切都很好。 但是,一旦我将 viewController 放入 navigationController 中,tableView 就会停止响应(didSelectRow 不会被调用)。我想我的代表出了点问题,但我就是想不通。

。 navigationController 响应良好(我可以点击顶部栏中的按钮)

。单元格中的按钮响应良好。

。如果我按下并按住一个单元格,它会突出显示,但未被选中。

更新:我刚刚发现如果我按住单元格至少一秒钟,当我释放它时会调用委托。比这还少,它永远不会被调用...???

代码使用如下:

ModalViewController* controllerWithTable = [[self storyboard] instantiateViewControllerWithIdentifier:identifier];

UINavigationController* navigationController = [[UINavigationController alloc] initWithRootViewController:controllerWithTable];

UIPopoverController* popover = [[UIPopoverController alloc] initWithContentViewController:navigationController];
popover.delegate = self;

[popover presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

【问题讨论】:

    标签: ios tableview popover navigationcontroller


    【解决方案1】:

    如果您使用 popoverController 来显示表格视图,则无需将其嵌入导航控制器中,而是使用表格视图制作不同的 Viewcontroller,然后将其放入 popover 控制器中。我使用了一些像这样..

    在您的应用委托中为 UIPopoverController 进行全局引用, //在你的 Appdelegate.h 文件中声明这个 @property(strong, nonatomic) UIPopoverController *popOverForTableView;

    现在在你想要显示 PopOver 视图的控制器中使用这个,

     TableViewCOntroller* popoverContent = [[TableViewCOntroller alloc] init];
    
      NSString *identifier=@"tableVC"
      popoverContent =[[UIStoryboard storyboardWithName:@"Main"
                                                   bundle:nil]
                         instantiateViewControllerWithIdentifier:identifier];
      popoverContent.preferredContentSize = CGSizeMake(330, 280);
    
    
        AppDelegate *appDelegate=(AppDelegate *)[[UIApplication sharedApplication]delegate];
    
        appDelegate. popOverForTableView = [[UIPopoverController alloc]initWithContentViewController:popoverContent];
        appDelegate.popOverForTableView.delegate = self;
        appDelegate.popOverForTableView.backgroundColor=[UIColor blackColor];
        [appDelegate.popOverForTableView  presentPopoverFromRect:self.date.frame inView:self.view  permittedArrowDirections:(UIPopoverArrowDirectionUp) animated:YES];
    

    您可以相应地关闭它......,......看看这是否有帮助..

    【讨论】:

    • 谢谢,我确实需要导航控制器,因为在点击单元格时,我需要在同一个弹出框内推送另一个视图控制器。我将编辑我的问题以使其更清楚
    • 那么在点击单元格时,只需呈现详细视图控制器而不是推送.....尝试使用 presentmodalViewCONtroller 方法
    • 哦,对了,如果我不能解决这个问题,这将是我的解决方案,但从 UI 角度来看,视图来自右侧是有道理的。
    • 查看我更新的问题,只是注意到如果我按住单元格一秒钟,它确实会被选中...
    • 你能检查你的表 vVIew didSelectRowAtIndex 方法,检查它是否被调用,如果是,那么我认为你写的代码有问题
    【解决方案2】:

    好的,我在那里找到了答案:https://stackoverflow.com/a/18159463/3562952

    tableView 并没有反应迟钝,它只是在按住 1-3 秒后才做出欺骗性的反应。

    我在捕获点击的父视图上有一个点击响应器。我现在在显示弹出框时将其删除并在解雇时重新放入。

    我在谷歌上搜索错误的症状 :)

    【讨论】:

      猜你喜欢
      • 2014-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-03
      • 2016-11-08
      相关资源
      最近更新 更多