【问题标题】:SWRevealViewController does not recognize sectors for destinationViewControllerSWRevealViewController 无法识别destinationViewController 的扇区
【发布时间】:2015-11-19 11:03:52
【问题描述】:

我正在使用 John Lluch 的 SWRevealViewController,效果很好,但我无法弄清楚如何在目标视图控制器中设置选择器,就像我在其他 UIViewController 的 segues 中所做的那样。

还有其他人遇到过这个问题吗?

这是我的代码:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    // Set the title of navigation bar by using the menu items
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    UINavigationController *destViewController = (UINavigationController*)segue.destinationViewController;
    if ([segue.identifier isEqualToString:@"goalSegue"]) {

        if ([segue.destinationViewController respondsToSelector:@selector(setTitleForViewController:)]) {
            // use performSelector:withObject: to send without compiler checking
            // (which is acceptable here because we used introspection to be sure this is okay)

            NSString * titleText = @"Athlete Goals";

            [segue.destinationViewController performSelector:@selector(setTitleForViewController:) withObject:titleText];
        } else destViewController.title = [[menuItems objectAtIndex:indexPath.row] capitalizedString];

    } else destViewController.title = [[menuItems objectAtIndex:indexPath.row] capitalizedString];

}

我在其他视图控制器中的 prepareForSegue 中使用了此代码。选择器存在于目标 TableViewController 中,但 SWRevealViewController 跳过 if 语句而不执行。

【问题讨论】:

  • 您能否详细说明一下您在哪里使用此代码?它是在您的后视图控制器中还是在某些前视图控制器中?
  • 它位于带有菜单的tableView所在的rearViewController中。
  • 您的目标视图控制器是否嵌入在导航视图控制器中?
  • 是的,目标视图控制器是一个 TableViewController 与附加的视图 segues 链接到它。

标签: ios uiviewcontroller segue swrevealviewcontroller


【解决方案1】:

我认为问题在于您试图在UINavigationController 上运行选择器方法,而不是选择器所在的实际TableViewController。注意destViewController 是一个UINavigationController,里面有你的TableViewController

所以实际上,你可以试试下面的代码,看看它是否有效(我已经在使用 SWRevealViewController 的示例项目中尝试过,它有效)

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    // Set the title of navigation bar by using the menu items
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    UINavigationController *destViewController = (UINavigationController*)segue.destinationViewController;
    YourTableViewController *tableController = (YourTableViewController *)[destViewController childViewControllers].firstObject;
    if ([segue.identifier isEqualToString:@"goalSegue"]) {

         if ([tableController respondsToSelector:@selector(setTitleForViewController:)]) {
              NSString * titleText = @"Athlete Goals";
              [tableController performSelector:@selector(setTitleForViewController:) withObject:titleText];
         } else destViewController.title = [[menuItems objectAtIndex:indexPath.row] capitalizedString];

    } else destViewController.title = [[menuItems objectAtIndex:indexPath.row] capitalizedString];

}

据我了解,这可能不是SWRevealViewController 的问题。

希望这会有所帮助。

【讨论】:

  • 沙赞!奇迹般有效!谢谢 Gurtej,我把头发拉出来了。
  • @PhillipOReilly 很高兴我能帮上忙 :) 感谢您的支持并接受答案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-02
  • 2021-07-12
  • 2019-08-28
  • 1970-01-01
  • 1970-01-01
  • 2014-04-25
  • 1970-01-01
相关资源
最近更新 更多