アプリケーションでデバイス上のデータベースを使用できるようになり、スキーマが初期化されたため、データベースへの名前の追加を開始できます。このことを行うために、アプリケーションでは、テキストフィールドを持つ新しい画面を使用します。
ユーザーが新しい名前を入力できるように、新しいビューコントローラーを作成します。
[control] キーを押しながら [Classes] をクリックし、[追加] メニューで [新規ファイル] をクリックします。
左側のリストで [iPhone OS Cocoa Touch Class] を選択し、[UIViewController] サブクラスをクリックします。
[UITableViewController] サブクラスオプションはクリックせずに、[With XIB for user interface] をクリックします。
[次へ] をクリックします。
ファイルに NewNameViewController.m という名前を付けます。
保存場所として names/Classes/ をクリックします。
[完了] をクリックします。
これにより、3 つのファイル (NewNameViewController (.h) ヘッダー、実装 (.m) ファイル、および Interface Builder で編集できる XIB ファイル) が作成されます。XIB ファイルをすべてグループ化するには、ファイルを Resources フォルダーに移動します。このフォルダーには、2 つの XIB ファイルがすでに存在しています (MainWindow と RootViewController の XIB ファイル)。
XIB ファイルを編集してテキストフィールドを作成する前に、まずヘッダーに Outlet プロパティを追加してください。これにより、テキストフィールド、およびユーザーが名前の入力を完了したときに実行するアクションが、XIB ファイルからコードに結び付けられます。NewNameViewController.h ファイルに次のコードを追加します。
@interface NewNameViewController : UIViewController { UITextField *newNameField; } @property (retain) IBOutlet UITextField *newNameField; - (IBAction)doneAdding:(id)sender; @end |
実装ファイル内のプロパティを統合し、dealloc メソッドでテキストフィールドを解放します。アクションは、DataAccess オブジェクトで新しい名前を挿入できるようになってから定義します。現在のところは、NewNameViewController.m に空のメソッドスタブを作成して、コンパイルの警告を回避します。
@synthesize newNameField; - (IBAction)doneAdding:(id)sender {} |
IBAction キーワードを指定すると、呼び出すイベントに対してメソッドを利用可能にするように [Interface Builder] に通知されます。[Interface Builder] がメソッドを認識するように、ヘッダーを保存してください。
これで、アウトレットが設定されました。次に、NewNameViewController XIB ファイルをダブルクリックして、[Interface Builder] で編集します。[Interface Builder] に、バッテリー充電量を示すステータスバーを持つ空のビューが表示されます。このビューにはナビゲーションバーも表示されるため、以下の手順に従って表示をシミュレートします。
[Document] ウィンドウ (Command-0) で [View] をクリックします。
[Attributes Inspector] ウィンドウ (Command-1) の [Simulated User Interface Elements] で、[Top Bar] に [Navigation Bar] を設定します。
ビューで、空のナビゲーションバーがステータスバーのすぐ下に表示されます。
ユーザーが新しい名前を入力できるように、ビューにテキストフィールドを追加します。
[Library] ウィンドウ (Command-Shift-L) の [Inputs & Values] で、テキストフィールドをクリックして、ビューにドラッグします。
下部にあるキーボードが隠れないように、テキストフィールドをビューの上部に配置します。
名前が表示されるように、テキストフィールドを少し広げます。約 230 ピクセルの幅を使用してください。サイズおよび配置オプションを表示するには、テキストフィールドを選択して、[Size Inspector] (Command-3) を使用します。
テキストフィールドをより使いやすくするには、いくつかのプロパティを変更します。
ビューでテキストフィールドをクリックします。
テキストフィールドを選択した状態で、[Attributes Inspector] ウィンドウ (Command-1) を開きます。
[Placeholder] に [名前] を設定します。
フォントサイズを 18 ポイントにします。
[Capitalize] に [Words] を設定します。
[Return Key] に [Done] を設定します。
ユーザーが名前の入力を完了したことがコントローラーによって認識されるようにするには、[Interface Builder] でアクション接続を作成します。
テキストフィールドを選択した状態で、Text Field Connections Inspector (Command-2) を開きます。
[Did End on Exit] イベントサークルをクリックして、[Document] ウィンドウの [File's Owner] にドラッグし、[done Adding] をクリックして接続を作成します。[File's Owner] にドラッグアンドドロップしても選択されない場合は、NewNameViewController ヘッダーが保存されており、かつ、このヘッダーに IBOutlet doneAdding が含まれていることを確認します。この XIB ファイルの [File's Owner] は、[File's Owner] のタイプが示すように NewNameViewController クラスです。
コードでテキストフィールドを参照するには、前にヘッダーに定義した IBOutlet プロパティにこのテキストフィールドを接続する必要があります。
[Document] ウィンドウで [File's Owner] をクリックします。[Connections Inspector] (Command-2) を開きます。
[Outlets] で、newNameField を探します。
newNameField サークルをクリックして、実際のビューの名前フィールドにドラッグします。
ビューが完成しました。[Interface Builder] で XIB ファイルを保存し、Xcode に戻ります。
ビューを完成させるには、さらにいくつかのプロパティをコードに設定する必要があります。NewNameViewController 実装で viewDidLoad メソッドテンプレートをコメント解除し、次のコードに置き換えます。
- (void)viewDidLoad { [super viewDidLoad]; // Set the title to display in the nav bar self.title = @"Add Name"; // Set the text field to the first responder to display the keyboard. // Without this the user needs to tap on the text field. [newNameField becomeFirstResponder]; } |
作成したビューコントローラーを表示するには、RootViewController を設定する必要があります。NewNameViewController ヘッダーと DataAccess ヘッダーを RootViewController の実装ファイルにインポートし、次のメソッドシグネチャーをヘッダー (RootViewController.h) に追加します。
- (void)showAddNameScreen; |
次のコードで RootViewController.m のメソッドを実装します。
- (void)showAddNameScreen { NewNameViewController * addNameScreen = [[NewNameViewController alloc] initWithNibName:@"NewNameViewController" bundle:nil]; [self.navigationController pushViewController:addNameScreen animated:YES]; } |
(NewNameViewController のタイトルを設定したときと同様に) RootViewController のタイトルを設定し、ナビゲーションバーの右側に、showAddNameScreen を呼び出すプラス記号ボタンを追加します。viewDidLoad ブロックのコメントを解除し、次のコードに置き換えます。
- (void)viewDidLoad { [super viewDidLoad]; // The Navigation Controller uses this to display the title in the nav bar. self.title = @"Names"; // Little button with the + sign on the right in the nav bar self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(showAddNameScreen)]; } |
データベースに新しい名前を挿入するために、DataAccess オブジェクトに機能を追加します。次のメソッドシグネチャーを DataAccess ヘッダーに追加します。
// Adds the given name to the database. - (void)addName:(NSString *)name; |
実装ファイルの addName メソッドを実装します。
- (void)addName:(NSString *)name { const char * INSERT = "INSERT INTO Names(name) VALUES(?)"; ULPreparedStatement * prepStmt = connection->PrepareStatement(INSERT); if (prepStmt) { // Convert the NSString to a C-Style string using UTF8 Collation prepStmt->SetParameterString(1, [name UTF8String], [name length]); prepStmt->ExecuteStatement(); prepStmt->Close(); connection->Commit(); } else { NSLog(@"Could not prepare INSERT statement."); } } |
これで addName メソッドの実装が完了したので、NewNameViewController の doneAdding メソッドを実装ファイルに追加します。メソッドを次のコードに置き換えます。
- (IBAction)doneAdding:(id)sender { if (newNameField.text > 0) { [[DataAccess sharedInstance] addName:newNameField.text]; } [self.navigationController popViewControllerAnimated:YES]; } |
DataAccess ヘッダーを NewNameViewController.h にインポートします。それによって、キーボードの [Done] ボタンを押すと、名前がデータベースに追加され、テーブルビューが返されます。ただし、テーブルビューは、データベースにあるデータを表示するようにまだ設定されていません。レッスン 4:データベースのデータの表示を参照してください。
この時点で、アプリケーションを構築して、エラーなしに構築できるかどうかをテストする必要があります。[ビルド] メニューで [ビルド] をクリックします。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |