SWRevealViewController FrontViewController没有加载,卡住为黑色,其他视图很好

时间:2014-12-05 00:50:27

标签: ios objective-c storyboard swrevealviewcontroller

我正在尝试转换我们的应用程序以使用SWRevealViewController为应用程序的每一侧提供一个侧边栏。但是,尽管在其中一个示例应用程序中遵循了代码,但我收到的错误是前视图的ViewController无法正常工作。 viewDidLoad被调用,但一切都是黑色的。

有趣的是,如果在我的viewDidLoad中,我将背景颜色设置为视图的红色,则会反映出来。但是来自原始故事板的Interface builder中的内容不是。

我在AppDelegate中使用的代码是:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window = window;

    MainViewController *frontViewController = [[MainViewController alloc] init];
    RearViewController *rearViewController = [[RearViewController alloc] init];

    UINavigationController *frontNavigationController = [[UINavigationController alloc] initWithRootViewController:frontViewController];
    UINavigationController *rearNavigationController = [[UINavigationController alloc] initWithRootViewController:rearViewController];

    SWRevealViewController *revealController = [[SWRevealViewController alloc] initWithRearViewController:rearNavigationController frontViewController:frontNavigationController];
    revealController.delegate = self;

    RightViewController *rightViewController = rightViewController = [[RightViewController alloc] init];
    rightViewController.view.backgroundColor = [UIColor greenColor];

    revealController.rightViewController = rightViewController;

    //revealController.bounceBackOnOverdraw=NO;
    //revealController.stableDragOnOverdraw=YES;

    self.viewController = revealController;

    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}

#pragma mark - SWRevealViewDelegate

- (id <UIViewControllerAnimatedTransitioning>)revealController:(SWRevealViewController *)revealController animationControllerForOperation:(SWRevealControllerOperation)operation fromViewController:(UIViewController *)fromVC toViewController:(UIViewController *)toVC
{
    if ( operation != SWRevealControllerOperationReplaceRightController )
        return nil;

    if ( [toVC isKindOfClass:[RightViewController class]] )
    {
        if ( [(RightViewController*)toVC wantsCustomAnimation] )
        {
            id<UIViewControllerAnimatedTransitioning> animationController = [[CustomAnimationController alloc] init];
            return animationController;
        }
    }

    return nil;
}

这是Main.Storyboard,它只适用于MainViewController: enter image description here

当应用加载时,视图只是黑色。但我可以从左右边缘拖动并按预期方式查看侧边栏。因此,只有FrontView才会出现黑色。我把一个NSLog()插入到ViewDidLoad中,它出现在控制台中,就像 - (void)loadView {}中的一个一样,它显示了View正在加载。

如果我在viewDidLoad中放入一个[self.view setBackgroundColor:[UIColor redColor]],它会生效,这意味着它链接到视图,但它只是故事板内的视图没有出现。这很奇怪,因为故事板还包含一个NavigationController,它确实出现了(我想 - 除非导航控制器来自其他地方 - 我很确定它不是这样)。

有关可能导致此问题的任何想法?

1 个答案:

答案 0 :(得分:8)

我有同样的事情发生。我在查看示例代码时修复了它。

  1. 在你的故事板中添加一个UIViewController
  2. 选择它,在Identity Inspector中只使用'SWRevealViewController'作为类
  3. 将UITableViewController添加到故事板
  4. 现在选择您之前添加的ViewControler并右键单击绘制一条到TableViewController的行
  5. 选择“显示视图控制器设置控制器”
  6. 单击新添加的Segue,在Attribute Inspector中将标识符更改为“sw_rear”
  7. 将任何自定义ViewController(例如“MyViewController”)添加到故事板
  8. 选择它,然后转到菜单 - &gt;编辑器 - &gt;嵌入 - >导航控制器
  9. 现在应该出现一个新的导航控制器
  10. 再次右键单击 - 从第一个ViewController到新的NavigationController
  11. 画一条线
  12. 再次选择'揭示视图控制器设置控制器'
  13. 现在将此新Segue的标识符设置为“sw_front”
  14. 现在您有一个基本设置,在运行您的应用程序时,您应该看到自定义的ViewController。现在必须添加菜单按钮。

    在ViewControllers .m中添加以下内容:

    @interface MyViewController ()
    @property (nonatomic) IBOutlet UIBarButtonItem* revealButtonItem;
    @end
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        [self customSetup];
    }
    
    - (void)customSetup
    {
        SWRevealViewController *revealViewController = self.revealViewController;
        if ( revealViewController )
        {
            [self.revealButtonItem setTarget: self.revealViewController];
            [self.revealButtonItem setAction: @selector( revealToggle: )];
            [self.navigationController.navigationBar addGestureRecognizer: self.revealViewController.panGestureRecognizer];
        }
    }
    

    现在再次切换到故事板。将一个UIBarButtonItem添加到MyViewController。再次右键单击 - 从MyViewController中绘制一条线到NavigationBar中的这个新项。选择'revealButtonItem'。

    多数民众赞成!对要添加的每个ViewController重复上一步。您只需将它们从TableView右键单击绘图连接到您添加的每个ViewControllers的新添加的NavigationController。要推动ViewControllers,只需选择“显示视图控制器推送控制器”。

    希望有所帮助!