У меня есть требование загрузить UIWebView, обернутый в UINavigationController, и показать его в модальном представлении.UINavigationController должен показывать панель навигации вверху с кнопкой «назад» (я не нашел кнопку «назад», поэтому я использовал кнопку «Готово»).Я не должен использовать перо, поэтому я должен делать это только программно.Код должен в основном служить библиотекой, которая может быть интегрирована с любым приложением.Он должен работать как для IPhone, так и для iPad.
Это то, что я сделал до сих пор:
Я создал класс WebViewController -
@interface WebViewController : UIViewController
{
UIWebView *m_cWebView;
}
@property (nonatomic, retain) UIWebView *m_cWebView;
@end
- (void)loadView
{
CGRect webFrame = [[UIScreen mainScreen] applicationFrame];
webFrame.size.height -= self.navigationController.navigationBar.frame.size.height;
UIWebView *pWebView = [[UIWebView alloc] initWithFrame:webFrame];
pWebView.autoresizesSubviews = YES;
pWebView.autoresizingMask=(UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth);
self.view = pWebView;
pWebView.scalesPageToFit = YES;
self.m_cWebView = pWebView;
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(back:)];
}
- (void)viewDidLoad
{
[super viewDidLoad];
if( m_cWebView != nil )
{
NSURL *url = [NSURL URLWithString:@"http://www.google.co.in"];
NSURLRequest* request = [NSURLRequest requestWithURL:url];
[m_cWebView loadRequest:request];
}
}
- (IBAction)back:(id)sender
{
[self dismissModalViewControllerAnimated:YES];
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
return nil;
}
- (id)init
{
return self;
}
В основномконтроллер представления
@property (retain, atomic) UINavigationController *navCon;
-(IBAction)buttonPressed:(id)sender
{
if( navCon == nil )
{
WebViewController* webViewController = [[WebViewController alloc] init];
navCon = [[UINavigationController alloc] initWithRootViewController:webViewController];
}
[self presentModalViewController:navCon animated:YES];
}
Пока все работает нормально.Теперь мои проблемы:
- Я совершенно новичок в мире iOS.Правильный ли приведенный выше код или есть проблемы?
- Код должен быть скомпилирован с Xcode 4.2 с ARC, поэтому я предполагаю, что мне не нужно беспокоиться о памяти.
- логика для расчета правильного начального размера WebView (я беру размер основного экрана и вычитаю высоту панели навигации)?
- Как мне справиться с изменением ориентации, чтобы при изменении ориентации мой вид навигации иWebView оба настраиваются в соответствии с новой ориентацией?
Спасибо
Редактировать:
Я пытался реализовать вращение, но я не смог заставить его работать,willRotateToInterfaceOrientation не вызывается на моем WebViewController, даже если я возвращаю YES из shouldAutorotateToInterfaceOrientation (и этот метод вызывается).Когда я попытался работать с пустым пером (загрузка WebViewController с этим пустым пером), то он работает нормально.
Добавление 5-го требования:
- Еще одно дополнительное требование заключается в том, что при этоммодальное диалоговое окно закрывается, представление, представившее это, должно быть в правильной ориентации (то есть, когда модальное диалоговое окно включено, события ориентации также передаются в представление, представившее это модальное представление).
Спасибо