Представянето на ViewController прекъсва предишния ViewController

Проблемът ми е, че когато представям UIViewController, представящите изгледи стават черни.

Имам UIViewController с име mainViewController, което е основният изглед на моя windows. Вътре имам MMDrawerController (току-що добавен като подизглед на изгледа на mainViewController).

MMDrawerController съдържа останалите ми възгледи.

Но когато представям нов UIViewController от моя mainViewController, новият VC се показва добре, но когато го отхвърли, оставя само черен екран. За да отбележа, черният екран се появява при добавяне (виждам го директно). Не и при уволнение.

За целите на тестването направих този код:

UIViewController *vc = [UIViewController new];
vc.view.backgroundColor = [UIColor redColor];
[[[[UIApplication sharedApplication] keyWindow] rootViewController] presentViewController:vc animated:NO completion:^{
    [vc dismissViewControllerAnimated:YES completion:nil];
}];

Което води до същия черен резултат като при нормална употреба. (обикновено е QLViewController...)

Моят mainViewController е настроен така:

_mainViewController = [MyMainViewController new];
_window.rootViewController = _mainViewController;
[self.window addSubview:_mainViewController.view];

Изходен код на MMDrawerController, който е актуален в моя проект


person Tancrede Chazallet    schedule 03.03.2014    source източник
comment
За коя версия на iOS създавате? Обмисляли ли сте да използвате сторибордове, вместо да създавате присвояване на вашия rootViewController в код?   -  person Ashley Mills    schedule 04.03.2014
comment
@AshleyMills Създавам за iOS 6 и 7, не опитах на iOS6 за този проблем, случва се на iOS7 (което ме интересува най-много...). Никога не използвам IB във всички приложения (и няма да използвам, не трябва да има нищо общо с решението).   -  person Tancrede Chazallet    schedule 04.03.2014
comment
Тествах в нов проект с кода, който сте написали, но mainViewController остава цвета на фона   -  person simalone    schedule 04.03.2014
comment
Проблемът с @simalone не е с mainViewController, което изглежда добре. Това е с друг UIViewController в (MMDrawerController). Когато представям новия си UIViewController, предишният ми (който вече беше в mainViewController) е повреден, сякаш ограниченията му са напълно изчезнали. И вече не го виждам на екрана (но все още е подизглед, предполагам).   -  person Tancrede Chazallet    schedule 04.03.2014
comment
@AncAinu, така че проблемът може би е в кода за внедряване на MMDrawerController, можете ли да посочите основния код за него?   -  person simalone    schedule 04.03.2014
comment
@simalone Изходен код на MMDrawerController   -  person Tancrede Chazallet    schedule 04.03.2014
comment
Опитахте ли да получите прозореца от AppDelegate вместо [[[UIApplication sharedApplication] keyWindow] rootViewController]?   -  person P. Sami    schedule 04.03.2014
comment
@P.Sami да, аз също го направих директно с моя mainViewController   -  person Tancrede Chazallet    schedule 04.03.2014


Отговори (2)


Тествах кода само в примерния проект на MMDrawerController, но не мога да възпроизведа проблема, следното е, което опитах:

MMAppDelegate.m

-(BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
    //...

    UIViewController *testVc = [[UIViewController alloc] init];
    testVc.view.backgroundColor = [UIColor greenColor];
    [testVc.view addSubview:self.drawerController.view];

    [self.window setRootViewController:testVc];
    [self.window addSubview:testVc.view];

    return YES;
}

MMExampleSideDrawerViewController.m:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    switch (indexPath.section) {
        case MMDrawerSectionViewSelection:{
            UIViewController *vc = [UIViewController new];
            vc.view.backgroundColor  = [UIColor redColor];
            UIViewController *mainVC =  [[UIApplication sharedApplication] keyWindow].rootViewController;
            [mainVC presentViewController:vc animated:YES completion:^{
                [vc dismissViewControllerAnimated:YES completion:nil];
            }];

            return;
    //...
}

MMExampleCenterTableViewController.m:

-(void)doubleTap:(UITapGestureRecognizer*)gesture{
    UIViewController *vc = [UIViewController new];
    vc.view.backgroundColor  = [UIColor redColor];
    UIViewController *mainVC =  [[UIApplication sharedApplication] keyWindow].rootViewController;
    [mainVC presentViewController:vc animated:YES completion:^{
        [vc dismissViewControllerAnimated:YES completion:nil];
    }];

    return;

    [self.mm_drawerController bouncePreviewForDrawerSide:MMDrawerSideLeft completion:nil];
}
person simalone    schedule 04.03.2014
comment
Насочи ме в правилната посока, пич. Открих проблема. - person Tancrede Chazallet; 04.03.2014

В крайна сметка проблемът беше, че приложих вмъкнати ограничения върху моя mainViewController.

Зад сцената предполагам, че този метод presentViewController:animated:completion: използва рамки, а не AutoLayout, които нарушават UIView на UIViewController, които са в mainViewController.

Благодарение на @simalone използвах същия начин, за да намеря произхода на проблема (използвайте примерен проект MMDrawerController).

Искам да тествам сами проблема, качих примерния проект с проблема, за да можете да го разберете. Има точка на прекъсване на линията, която е източникът на грешката. След това просто щракнете два пъти върху изгледа.

Благодаря отново на @simalone. наздраве !

person Tancrede Chazallet    schedule 04.03.2014