2015-05-28 3 views
1

Я представляю контроллер просмотра модально с помощью этого кода:parentViewController возвращение нуль на IOS

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
    SubmitAYoNViewController *ivc = [storyboard instantiateViewControllerWithIdentifier:@"SubmitAYoN"]; 
    [ivc setModalPresentationStyle:UIModalPresentationFullScreen]; 
    [self presentViewController:ivc animated:YES completion:nil]; 

Тогда в моем SubmitAYoNViewController у меня есть это:

NSLog(@"%@",self.parentViewController); 
    if([self.parentViewController isKindOfClass:[YesOrNoViewController class]]) { 
     NSLog(@"do something"); 
} 

self.parentVeiwController является NULL. Почему это?

EDIT: Я хочу получить доступ к методу из моего родительского контроллера представления, а затем к тому, с которого был открыт объект SubmitAYoN.

РЕШЕНИЕ: Вместо этого я использовал делегатов. Согласно нижеприведенным ответам, presentViewController не создает отношения родитель-потомок.

+0

Вы проверили свой идентификатор в доске объявлений? это @ "SubmitAYoN"? – Rajesh

+0

@iDev Да, идентификаторы верны, потому что новый вид открывается правильно, и все остальное работает в этом vc. – ghostrider

+2

Если вам нужен контроллер представления представления, используйте «self.presentingViewController». 'self.parentViewController' возвращает родительский контроллер, который будет равен нулю, если он не является дочерним элементом другого контроллера. –

ответ

3

Если вам нужен контроллер представления, используйте self.presentingViewController. self.parentViewController возвращает родительский контроллер, который будет равен нулю, если он не является дочерним элементом другого контроллера.

Так используйте:

NSLog(@"%@",self.presentingViewController); 
if([self.presentingViewController isKindOfClass:[YesOrNoViewController class]]) { 
    NSLog(@"do something"); 
} 

Из документации для presentViewController:

Этот метод устанавливает presentedViewController свойство указанного контроллера представления, изменяет вид этой точки зрения контроллера на основе стиля представления и затем добавляет представление в иерархию представлений.

Так что никакого упоминания о том, что контроллер сделан ребенком, поскольку это представление, которое добавляется к существующей иерархии представлений.

Вы бы были в порядке до iOS5. Для справки о собственности parentViewController гласит:

Перед прошивкой 5.0, если вид не имеет родительский контроллер и вид вручали контроллер вид Предъявление будет возвращен. На iOS 5 этого поведения больше не происходит. Вместо этого используйте свойство presentingViewController для доступа к представлению представления .

0

self.parentViewController является то, что вы представили от этого viewcontroller или self.navigationgtionController

Итак, когда вы представляя viewcontroller где вы держите экземпляр `ViewController» будет иметь self.parentViewController.

+0

Можете ли вы проверить мое редактирование, пожалуйста? – ghostrider

Смежные вопросы