2011年12月8日

【iPhone】UINavigationControllerを使う(2)

今回もUINavigationControllerの使い方の続きをやっていきましょう。

今回はMainViewを中心に解説します。

分からない事がありましたら質問してください。
If you have any questions, please ask.


まずはheaderファイルから。
今回のMainViewはほぼWebViewといたします。
上段にタイトルバーを用意し、右上にボタンだけの簡単な設定とします。

MainViewController.h

#import <UIKit/UIKit.h>

@interface MainViewController : UIViewController
{
    IBOutlet UIWebView *webView;
}

@property (nonatomic, retain) UIWebView *webView;

@end
これでヘッダは終わり。
InterfaceBuilderを使用するのはwebViewのみとします。
ほかはプログラムで配置していきます。

MainViewController.m

#import "MainViewController.h"
#import "SubViewController.h"

@implementation MainViewController

@synthesize webView = _webView;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
  self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
  if (self) {
    // Custom initialization
    // set title
    self.title = NSLocalizedString(@"title_main", @"Title");
        
    // set button
    UIBarButtonItem *btn_settings = [[UIBarButtonItem alloc]
                                     initWithTitle:NSLocalizedString(@"btn_settings", @"Settings")
                                     style:UIBarButtonItemStyleBordered
                                     target:self
                                     action:@selector(subView:)
                                     ];
    self.navigationItem.rightBarButtonItem = btn_settings;
        
    // set web view
    self.webView = [[UIWebView alloc] init];
    self.webView.scalesPageToFit = YES;
    [self.view addSubview:self.webView];
  }
  return self;
}
このプログラム内ではまず、タイトルを設定。
NSLocalizeString()で設定してあるのは、後で多言語対応する為です。
とりあえず日本語だけでも問題ありませんが、プログラム上に日本語を書くのが嫌いなので書いていません。
(全角/半角とかコーディング中は控えたい)

次に設定ボタンを設置しております。
UIBarButtonItemでインスタンスを生成。
ここで、押されたときに動作するアクションを指定しております。
今回はsubViewというアクションを指定してあります。
それをnavigationItemの右側に設置と指定してあります。
(rightBarButtonItemですね)

最後にメインとなるUIWebViewを設置します。
ここは省きます。

最後にアクション(subView)の設定

MainViewController.m

// action when btn_setting was pressed
- (void)subView:(id)sender
{
  // make a view controller
  SubViewController *subViewController = [[SubViewController alloc] initWithNibName:nil bundle:nil];
    
  // set title
  subViewController.title = NSLocalizedString(@"title_settings", @"設定");
    
  // back btn settings
  UIBarButtonItem *btn_back = [[UIBarButtonItem alloc]
                               initWithTitle:NSLocalizedString(@"btn_back", @"Back")
                               style:UIBarButtonItemStyleBordered
                               target:nil
                               action:nil
                               ];
  [self.navigationItem setBackBarButtonItem:btn_back];
    
  // move to this view
  [self.navigationController pushViewController:subViewController animated:YES];
    
  // release
  btn_back = nil;
  subViewController = nil;
}

アクションの解説をいたします。

ボタンを押されたあと、まずSubViewのコントローラのインスタンスを生成します。
次にタイトルを設定。
さらに、バックボタンを生成し、
SubViewへ遷移します。
[self.navigationController pushViewController:subViewController animated:YES]
で次のViewを呼び出しています。

以上です。

こんな感じで次回もよろしくお願いします。