UINavigationControllerの中にラップされたUIWebViewをロードし、それをモーダルビューで表示する必要があります。 UINavigationControllerは、ナビゲーションバーの上部に「戻る」と表示する必要があります(私は「戻る」ボタンを見つけられなかったので、「完了」ボタンを使用しました)。私はペン先を使用するはずではないので、プログラムでのみ行う必要があります。コードは、基本的にどのアプリケーションとも統合できるライブラリとして機能する必要があります。 IPhoneとIPadの両方で動作する必要があります。NIBのないモーダルビューのUINavigationController内にUIWebViewを表示
これは私がこれまでにやっていることです:
私はWebViewControllerクラスを作成 -@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];
}
メインビューコントローラで
@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;
}
をこれまでのところ、それが正常に働いています。今すぐ私の問題:
- 私はiOSの世界で全く新しいです。上記のコードは正しいですか、それとも問題がありますか?
- コードはXcode 4.2とARCでコンパイルされているはずなので、私はメモリについて心配する必要はないと推測します。
- WebViewの初期サイズを計算するロジックが正しいですか(メイン画面のサイズとナビゲーションバーの高さを差し引いています)?
- 方向を変更すると、ナビゲーションビューとWebViewの両方が新しい方向に調整されるように、向きの変更をどのように処理できますか?
おかげ
編集:
私は回転して実装しようとしたが、私はそれが仕事を得ることができませんでした。私がshouldAutorotateToInterfaceOrientationからYESを返していても、willRotateToInterfaceOrientationはWebViewControllerで呼び出されていません(このメソッドが呼び出されています)。空のペン先(空のペン先でWebViewControllerをロードしている)で作業しようとすると、正常に動作します。第五要件を追加する
:
- つ以上の追加の要件は、このモーダルダイアログ消すには、これを提示ビューは、(正しい向きであるべきとき、すなわちモーダルダイアログがアップし、オリエンテーションイベントである一方、このモーダルビューを提示したビューにも渡されます)。
おかげ
こんにちはmrunal、チップのおかげで: 戻るボタンは、いくつかの微調整で働いた。 shouldAutorotateToInterfaceOrientationからYESを返しますが、willRotateToInterfaceOrientationは呼び出されません。 WebViewControllerビューがUIWebViewそのものであることを強調したいと思います。 もう1つの追加の要件は、このモーダルダイアログが終了すると、これを提示したビューが正しい方向にあることです(つまり、モーダルダイアログが起動している間に、このモーダルビューを表示したビューに方向変更イベントが渡されます)。 )。 –