Разница между этими двумя подходами в том, что ситуация # 2:
addSubview
подхода не будет держать сильную ссылку на новый контроллер dddd
вида;
Подход addSubview
также требует, чтобы вручную указывал frame
для просмотра нового контроллера;
Даже если вы вручную держали сильную ссылку на dddd
, вы не будете получать ключевые события в этой точке зрения контроллера, поскольку иерархия вида контроллера не будет соответствовать иерархиям вида (см требуется подписка на WWDC 2011 VIdeo Implementing UIViewController Containment, оплаченных разработчика , Чтобы получить больше информации); и
Вы не увидите никакой анимации, так как вы addSubview
.
Если вы делаете addSubview
шаблон, вы должны сделать соответствующие контейнеры вызовов (см Implementing a Container View Controller раздела UIViewController класс Reference или Creating Custom Container View Controllers в View Controller Руководства по программированию). Как минимум, вы бы:
UIViewController *con = [[dddd alloc]init];//this controller is used to show a pdf using a webView(using loadURL method)
[self addChildViewController:con];
[self.view addSubview:con.view];
[con didMoveToParentViewController:self];
И, если вы хотите, чтобы удалить его:
[con willMoveToParentViewController:nil];
[con.view removeFromSuperview];
[self removeChildViewController:con];
Это гарантирует, что иерархия зрения контроллера согласуется с точки зрения иерархии, а также обеспечить что контроллер дочернего представления сохраняется. Однако вам придется вручную выполнять любую анимацию, когда вы представляете это новое представление.
Как правило, проще всего позвонить по телефону pushViewController
или presentViewController
, и это не проблема. Но в особых случаях эта пользовательская модель контейнера может быть полезна.
Кстати, если вы хотите, чтобы показать PDF, рассмотреть возможность использования UIDocumentInteractionController
, например, указать, что ваш контроллер представления соответствует UIDocumentInteractionControllerDelegate
, а затем использовать следующий код:
- (IBAction)didTouchUpInsidePDFButton:(id)sender
{
NSURL *url = [[NSBundle mainBundle] URLForResource:@"sample" withExtension:@"pdf"];
UIDocumentInteractionController *controller = [UIDocumentInteractionController interactionControllerWithURL:url];
controller.delegate = self;
[controller presentPreviewAnimated:YES];
}
- (UIViewController *) documentInteractionControllerViewControllerForPreview: (UIDocumentInteractionController *) controller
{
return self;
// or if you want to push to the PDF preview, and the current view controller
// already has navigation controller, you can:
//
// return self.navigationController;
}
С UIDocumentInteractionController
, вам не нужно иметь отдельный контроллер вида с UIWebView
.
UIView - это нечто иное, чем UIViewController. Эти две ситуации - совершенно разные вещи. – Astri
привет, astri, я знаю, что они разные. Но похоже, что оба они могут показать диспетчерский вид в окне. – nice
. Вы можете добавить столько просмотров, сколько хотите на вершине представления, даже представления, которые не покрывают весь экран , Например, кнопка UIView. Было бы неплохо посмотреть некоторые из видеороликов здесь: https://itunes.apple.com/gb/course/coding-together-developing/id593208016 – Astri