2010年11月30日 過去Blog
今回は、あるviewから他のviewへ移動させる方法を実装します。UINavigationController を利用し、以前の記事で制作済のコードを利用します。 以前の記事(とても簡単です。)をまだ読まれてない方は、そちらを読んでから、この記事をご覧ください。 今回学ぶこと:
  • 新規ビューの追加
  • ビューコントローラを追加する
  • ビューを移動するための設定
  • ビューとコードを接続
  • 戻るボタンを設置
まず、以前につくったHelloWorldアプリをXCodeで開きます。

[cell.textLabel setText:@”HelloWorld”];

となっている行を以下に編集します。

[cell.textLabel setText:@”NextView”];

新規ビューの追加

移動後に表示されるビューを作成します。RootViewController.xibをクリックし、Interface Builder を起動します。File > New をクリックし、左ペインの中からiOS > viewを選び、新規viewを作成します。 5-1

空のビューが作成されますので、そのviewの中に新しくlabelを配置します。表示されるテキストは「View2」と設定します。(表示されるテキストはお好きな文字列でかまいません。)

新しく作成したView2を保存します。保存先は、「HelloWorld」アプリを選び、その後に表示される確認ウインドウの中にある、HelloWorldをチェックして「add」ボタンをクリックします。

作成されたView2をXCode上でResourcesフォルダに移動しておきます。

ビューコントローラを追加する

新しいviewに接続するために、ビューコントローラを作成する必要があります。XCode上から ファイル > 新規ファイル をクリックし、左ペインのiOS > Cocoa Touch Classes から UIViewController subclass を選択し、「次へ」をクリックします。

5-2

View2ViewController という名前にして、「同時にView2ViewController.h も作成」をチェックし、「完了」ボタンを押します。

出来上がったView2ViewController.h と View2ViewController.m の二つをXCode上のClassesフォルダに移動します。

ビューを移動するための設定

RootViewController.h を開き、コードを以下のように編集します。
#import <UIKit/UIKit.h>

#import “View2ViewController.h”

@interface RootViewController : UITableViewController {

View2ViewController *view2ViewController;

}

@property(nonatomic,retain) View2ViewController *view2ViewController;

@end

#import “View2ViewController.h” によって、先ほど作成したViewControllerのヘッダーファイルを読み込み、これにより、View2ViewController型の新しいインスタンスを作成することが可能になります。 そして、view2ViewController というView2ViewController 型の変数を宣言しています。頭文字の大文字(V)と小文字(v)に注意してください。 view2ViewControllerは、View2ViewController のオブジェクトを参照する際に使う変数名です。 次に、RootViewController.m を開き、以下のコードを追加します。 @implementation RootViewController という一行の下に追加してください。

@synthesize view2ViewController;

次に、didSelectRowAtIndexPath というメソッドを探し、以下のように編集します。 このメソッドは、表のセルがタップされるたびに(自動的に)呼び出されます。 これは、indexPath を取得することに注意してください。これは、後で、NSArrayを使ってUITableViewを作成する方法を示す時に役に立ちますが、今は無視しておきましょう。

– (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

if(self.view2ViewController == nil){

View2ViewController *view2 = [[View2ViewController alloc] initWithNibName:@”View2″ bundle:[NSBundle mainBundle]];

self.view2ViewController = view2;

[view2 release];

}

// …

// Pass the selected object to the new view controller.

[self.navigationController pushViewController:self.view2ViewController animated:YES];

}

以下、コードの説明です。 まず、self.view2ViewController がnull かどうかチェックします。 これは、テーブルのセルが最初にクリックされた時に実行されます。 この後、ViewControllerは、パフォーマンスを最適化するために、メモリに格納されます。 次に、View2ViewControllerの新しいインスタンスを作成し、view2ViewControllerに設定します。(大文字と小文字の違いに注意してください。) viewControllerを設定したあと、メモリ解放(リリース)します。 Objective-Cはガベージコレクションを備えていないので、使われなくなったオブジェクトは明示的に自分でメモリを解放する必要があります。 最後の一行は、実際に、新しく作ったviewへ遷移させるものです。 navigationController のオブジェクトは、viewControllers を含んでいます。 最後のanimated:YES は、コンパイラに遷移の際にアニメーションが必要ということを伝えています。

ビューとコードを接続

このコードを実行する前に、コードと先ほど作ったviewを接続する必要があります。 View2.xib をダブルクリックして、Interface Builderを起動します。 View2ViewControllerクラスのオブジェクトとviewを関連づける必要がありますので、File’s Owner オブジェクトを選択し、Attributesインスペクタパネルの一番右の「identity」タブをクリックします。Class Identity > Class のドロップダウンからView2ViewController を選択します。 5-4 そして、viewウインドウ内の任意の場所をクリックし、Attributesインスペクタ内のConnections(左から2番目のタブ)をクリックします。New Referencing Outlet の右側の○をFile’s Owner までドラッグ&ドロップします。ドロップするとviewという選択肢がポップアップされるので、それを選択します。 5-5 この状態で一度、ビルドして実行してみてください。 「Next View」というセルをクリックすると、画面が遷移して、view2が表示されます。しかし、この状態では、NavigationControllerの上部に戻るボタンがありません。実際には戻るボタンはアップルから提供されていますが、それを利用するには、メインビューにタイトルを指定する必要があります。

戻るボタンを設置

iPhoneシミュレータを閉じて、RootViewController.m を開いてください。このビューが初めてロードされた時に呼ばれるメソッドであるviewDidLoadを以下のように編集します。

– (void)viewDidLoad {

[super viewDidLoad];

self.title = @”ナビゲーション;

}

RootViewController は、UITableViewControllerのサブクラスなので、それを使用してタイトルを設定しています。お好きな文字列を設定してみてください。 ここでは、「メインビュー」と設定しています。 この状態でビルドして実行すると以下のようにウインドウ上部にタイトルが表示されます。 5-6 「NextView」をクリックすると以下のように、戻るボタンが設置されているのが分かると思います。 5-7上部に表示された「ナビゲーション」ボタンをクリックすると前のページへ遷移するのが確認できると思います。

この投稿へのコメント

コメントを残す

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます。
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

CAPTCHA


ピックアップ記事

[エラー]modifying layer that is being finalized

2010年12月09日 過去Blog
このエラーは、autorelease によってリリースされた(される)コントロールを自分自身で release を読んで解放しようとした時に、おこるエラーの様です。 私の場合は、以下のようなコードを実行したら3回ほどクリックすると落ちました。 ボタンをクリックするとdivision.text にデータベースから抜き出した文字列を表示するというコードです。 division.text = [N…
「[エラー]modifying layer that is being finalized」をはてなブックマークに追加

PHPでPING送信を実装する

2010年03月28日 過去Blog
[php]<?php require_once('XML/RPC.php'); function Ping_Send($blog_title,$blog_url){ $ping = array( 'ping.rss.drecom.jp' => '/', 'api.my.yahoo.co.jp' => '/RPC2', 'blog.goo.n…
「PHPでPING送信を実装する」をはてなブックマークに追加

php 文字列を指定した文字ごとに分割する wordwrap

2010年01月29日 過去Blog
以下のようにすることで、10文字ごとに "n"で区切ることが出来ます。 参照元:http://www.php.net/manual/ja/function.wordwrap.php…
「php 文字列を指定した文字ごとに分割する wordwrap」をはてなブックマークに追加

dreamweaver msvcr80.dll のエラー

2010年01月16日 過去Blog
ここ数日、いきなり複数台のPCにインストールしていたdreamweaverが全て、起動時に強制終了される状態がつづいていました。 Windowsのコントロールパネルからイベントビューアをみると、msvcr80.dllがエラーを起こしているようなのですが、検索しても解決策はヒットせず、adobeのサイトを参考にレジストリなどを触ってみるも直接的な解決には至りませんでした。 DWでサイトとして定義…
「dreamweaver  msvcr80.dll のエラー」をはてなブックマークに追加

PHPで画像をランダム表示

2010年09月25日 過去Blog
とても丁寧に解説してくれているサイトがあったので、メモしておきます。 http://chocobit.com/2007/03/19.php Atlanta insurance recovery…
「PHPで画像をランダム表示」をはてなブックマークに追加
© graffiti on the web . All rights reserved. WordPress Theme by comfy