Подтвердить что ты не робот

Использование программного обеспечения View Controller из раскадровки программно в контроллере просмотра страницы

У меня есть приложение с раскадрой. Я использую несколько View Controller с segues для выбора из представления таблицы в зависимости от выбранного элемента. Я хочу иметь контроллер просмотра страницы, в котором страницы будут одним или несколькими контроллерами представлений из раскадровки, даже повторяя их. Я пытаюсь сделать init Контроллер просмотра страницы следующим образом:   ....   self.dataSource = я;

UIViewController *initialViewController =[self viewControllerAtIndex:current];
NSArray *viewControllers = [NSArray arrayWithObject:initialViewController];


[self setViewControllers:viewControllers direction:UIPageViewControllerNavigationOrientationHorizontal  animated:NO completion:nil];
....

- (UIViewController *)viewControllerAtIndex:(NSUInteger)index
{
if ((descriptions.count == 0) ||
    (index >= descriptions.count)) {
    return nil;
}

current=index;

// Create a new view controller and pass suitable data.
NSString *language = [[NSLocale preferredLanguages] objectAtIndex:0];

Description *description=[DBCompany getDescriptionById:language descriptionId:[[descriptions objectAtIndex:index] integerValue]];

UIViewController *viewController=nil;
if(description.frame==100){
    viewController=[[Company100ViewController alloc] init];
    ((Company100ViewController*)viewController).companyId = companyId;
}
return viewController;
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
if ((descriptions.count == 0) ||
    (current-1 < 0)) {
    return nil;
}

return [self viewControllerAtIndex:current-1];
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
if ((descriptions.count == 0) ||
    (current >= descriptions.count)) {
    return nil;
}

return [self viewControllerAtIndex:current+1];
}

Однако viewcontroller появляется черным цветом. Я думаю, это потому, что я добавляю класс UIviewcontroller, но не подключаю его к любому представлению XIB в моем случае с раскадрой.

Как я могу использовать различные контроллеры представления из раскадровки программно для использования в контроллере просмотра страницы?

4b9b3361

Ответ 1

Если вы выполняете viewController = [[Company100ViewController alloc] init], тогда да, это не контроллер, связанный с раскадрой или XIB. Чтобы загрузить контроллер с помощью XIB, вы должны сделать следующее:

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
Company100ViewController * vc = (Company100ViewController *)[sb instantiateViewControllerWithIdentifier:@"vc-identifier"];

В раскадровке убедитесь, что вы установили идентификатор контроллера вида в vc-identifier; любой идентификатор, который вы выберете.

Ответ 2

Swift 3

let sb = UIStoryboard(name: "MainStoryboard", bundle: nil)
let vc = sb.instantiateViewController(withIdentifier: "vc-identifier")

Ответ 3

Swift

Если вы хотите инициализировать объект UIViewController.

guard let vc = storyboard?.instantiateViewController(withIdentifier: "nameVC") else {
    return
}

// add to current view
view.addSubview(vc.view)