2012-02-17 11 views
1

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; 
} 

をこれまでのところ、それが正常に働いています。今すぐ私の問題:

  1. 私はiOSの世界で全く新しいです。上記のコードは正しいですか、それとも問題がありますか?
  2. コードはXcode 4.2とARCでコンパイルされているはずなので、私はメモリについて心配する必要はないと推測します。
  3. WebViewの初期サイズを計算するロジックが正しいですか(メイン画面のサイズとナビゲーションバーの高さを差し引いています)?
  4. 方向を変更すると、ナビゲーションビューとWebViewの両方が新しい方向に調整されるように、向きの変更をどのように処理できますか?

おかげ

編集:

私は回転して実装しようとしたが、私はそれが仕事を得ることができませんでした。私がshouldAutorotateToInterfaceOrientationからYESを返していても、willRotateToInterfaceOrientationはWebViewControllerで呼び出されていません(このメソッドが呼び出されています)。空のペン先(空のペン先でWebViewControllerをロードしている)で作業しようとすると、正常に動作します。第五要件を追加する

  1. つ以上の追加の要件は、このモーダルダイアログ消すには、これを提示ビューは、(正しい向きであるべきとき、すなわちモーダルダイアログがアップし、オリエンテーションイベントである一方、このモーダルビューを提示したビューにも渡されます)。

おかげ

答えて

1

ローテーションの問題を修正しました。

- (id)init 
{ 
    if (self = [super init]) 
     return self; 
    return nil; 
} 

- (id)init 
{ 
    return self; 
} 

交換し、完全に次のような方法削除:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    return nil; 
} 

愚かなミス:) 今それが回転している罰金。

誰かが依然として元の要件についてコメントできますか?

1

私の側からいくつかのポイント。

  1. 行わの代わりに、ボタンをバックについて:

    self.navigationItem.backBarButtonItem = [[[UIBarButtonItemのalloc] initWithTitle:@ "戻る" スタイル:UIBarButtonItemStylePlain対象:ゼロアクション:nilを]自動リリース] ;

  2. ナビゲーションバーの高さは常に44です。0F

  3. あなたはこれらのメソッドを持つ姿勢の変化を扱うことができる
    • (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

    復帰YES; }

    • (ボイド)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation時間:(NSTimeInterval)期間{ [自己adjustViewsForOrientation:toInterfaceOrientation]。 //ここに表示フレームを調整 }

私はその中にあなたのコードとメモリの問題について確認していない - ので、私はそれらの上にはコメントできません。

この情報がお役に立てば幸いです。

+0

こんにちはmrunal、チップのおかげで: 戻るボタンは、いくつかの微調整で働いた。 shouldAutorotateToInterfaceOrientationからYESを返しますが、willRotateToInterfaceOrientationは呼び出されません。 WebViewControllerビューがUIWebViewそのものであることを強調したいと思います。 もう1つの追加の要件は、このモーダルダイアログが終了すると、これを提示したビューが正しい方向にあることです(つまり、モーダルダイアログが起動している間に、このモーダルビューを表示したビューに方向変更イベントが渡されます)。 )。 –