Как вы меняете detailViewController в методе - PullRequest
0 голосов
/ 27 марта 2011

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

NewPageViewController *newDetailViewController = [[NewPageViewController alloc] initWithNibName:@"NewPageViewController" bundle:nil];
detailViewController = newDetailViewController;

Но мне нужно сделать это из моей старой детали (справа)

Я загружаю файл вiPad-приложение splitview с правой стороны, и после загрузки файла мне нужно в моем методе изменить правую сторону splitview на новый файл пера, чтобы я мог открыть и отредактировать файл

Может кто-нибудь указать мнеправильный путь.

Теперь у меня есть:

-(void)changeView { 

    ListController *newDetailViewController = [[ListController alloc] initWithNibName:@"ListController"bundle:nil]

    NSArray *viewControllers = [NSArray arrayWithObjects:[splitViewController.viewControllers objectAtIndex:0], newDetailViewController, nil];

    splitViewController.viewControllers = viewControllers;
    [viewControllers release];

}

-(void)downloadfile {
 //I do all my work and get the file.
NSLog(@"I need to change views now.");


                [self changeView];

}

Я не получаю никаких ошибок, но вид справа не меняется.

Ответы [ 3 ]

9 голосов
/ 12 мая 2015

Начиная с iOS8, вы можете использовать метод -showDetailViewController:sender: в UISplitViewController.См. документы Apple на UISplitViewController .

8 голосов
/ 27 марта 2011

В классе UISplitViewController имеется свойство NSArray *viewControllers.Первый элемент в этом массиве - ваш главный VC, второй в подробном VC.Повторно назначьте это свойство новому массиву, содержащему тот же главный VC, но новый VC подробностей:

// don't forget to set the delegate of myNewDetailViewController appropriately!
myNewDetailViewController.delegate = ...

NSArray newVCs = [NSArray arrayWithObjects:[uiSplitVC.viewControllers objectAtIndex:0], myNewDetailViewController, nil];

uiSplitVC.viewControllers = newVCs;

Ссылка API для UISplitViewController: http://developer.apple.com/library/ios/#documentation/uikit/reference/UISplitViewController_class/Reference/Reference.html

Примечание: непопробуйте заменить мастер VC - обычно он идет как-то не так. Я испробовал множество способов замены мастера, он всегда получался очень неприятным.Хотя замена детализации VC - это нормально!

0 голосов
/ 28 декабря 2017

Как упомянул @chris, вы можете использовать Delegate of UISplitViewController для iOS 8 и выше, что является наилучшим возможным способом.

 -(void)showDetailViewController:(UIViewController *)vc sender:(nullable id)sender NS_AVAILABLE_IOS(8_0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...