SWRevealViewController FrontViewController не загружается, застрял как черный, другие представления в порядке

Я пытаюсь перевести наше приложение на использование SWRevealViewController, чтобы дать нам боковую панель с каждой стороны приложения. Но, несмотря на выполнение кода в одном из примеров приложений, я получаю сообщение об ошибке, когда ViewController для вида спереди не работает должным образом. viewDidLoad вызывается, но все остается черным.

Интересно, что если в моем представленииDidLoad я устанавливаю красный цвет фона представления, это отражается. Но в конструкторе интерфейсов из оригинальной раскадровки ничего нет.

Код, который я использую в 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: введите здесь описание изображения

Когда приложение загружается, вид просто черный. Но я могу перетаскивать как с левого, так и с правого края и просматривать боковые панели, как и ожидалось. Так что только FrontView становится черным. Я вставил NSLog() в ViewDidLoad, который появляется в консоли, как и в -(void)loadView{}, который показывает, что представление загружается.

Если я помещу в viewDidLoad [self.view setBackgroundColor:[UIColor redColor]], это вступит в силу, то есть оно будет связано с представлением, но это просто представление внутри раскадровки не отображается. Что странно, так как раскадровка также содержит NavigationController, который действительно появляется (я думаю, если этот навигационный контроллер не приходит откуда-то еще, что я почти уверен, что это не так).

Любые мысли о том, что может быть причиной этого?


person Sam Heather    schedule 05.12.2014    source источник


Ответы (1)


У меня было то же самое. Я исправил это, глядя на пример кода.

  1. В вашей раскадровке добавьте UIViewController
  2. Выберите его и в Identity Inspector просто используйте «SWRevealViewController» в качестве класса.
  3. Добавьте UITableViewController в свою раскадровку
  4. Теперь выберите ранее добавленный ViewControler и щелкните правой кнопкой мыши и нарисуйте линию к вашему TableViewController.
  5. Выберите «показать контроллер набора контроллеров»
  6. Нажмите на недавно добавленный переход и в инспекторе атрибутов измените идентификатор на «sw_rear».
  7. Добавьте любой пользовательский ViewController (например, MyViewController) в раскадровку.
  8. Выберите его, затем перейдите в Меню->Редактор->Встроить->Контроллер навигации.
  9. Теперь должен появиться новый контроллер навигации.
  10. Снова щелкните правой кнопкой мыши и нарисуйте линию от первого ViewController до вашего нового NavigationController.
  11. Снова выберите «показать контроллер набора контроллеров»
  12. Теперь установите идентификатор этого нового перехода на «sw_front».

Теперь у вас есть базовая установка, и при запуске вашего приложения вы должны увидеть свой собственный 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. Выберите «показатьButtonItem».

Вот и все! Повторите последние шаги для каждого ViewController, который вы хотите добавить. Вам нужно только подключить их с помощью рисования правой кнопкой мыши из TableView к вашему недавно добавленному NavigationController каждого из ваших добавленных ViewController. Чтобы нажать ViewControllers, просто выберите «показать контроллер push-контроллера».

Надеюсь, это немного поможет!

person Tomte    schedule 05.12.2014