2010年9月10日金曜日

Day 3 OpenURL openMaps: カスタマイズ(2)キーボードを表示/非表示にする

以下のことを実装したい。
-------------------------
1.
テキストフィールドをタップしたときにキーボードを表示し、ユーザーがキーボードの「Done」ボタンをタップしたときにキーボードを非表示にする。
2.
テキストフィールドの下にある「openMaps」ボタンをタップすると、googleMapsが開き、テキストフィールドに入力した場所の地図が表示される。
-------------------------

UITextFieldDelegateプロトコルには、ユーザが「Return」ボタンをタップしたときにテキストフィールドを呼び出す(ボタンに表示されるテキストがどのようなものであっても)、textFieldShouldReturn:メソッドが含まれています。

textFieldShouldReturn:
Asks the delegate if the text field should process the pressing of the return button.

View Controllerはテキストフィールドのデリゲートとして設定したため、このメソッドを実装して、resignFirstResponderメッセージを送信する(キーボードを閉じる効果を持つ)ことによって、テキストフィールドからファーストレスポンダステータスを強制的になくすことができます。

resignFirstResponder
Notifies the receiver that it has been asked to relinquish its status as first responder in its window.

これを元に実装したソースは以下の通り。
-(BOOL)textFieldShouldReturn:(UITextField *)tf{

 [tf resignFirstResponder];
 
 return YES;
}

テキストフィールドに入力された文字を openMaps: メソッドに渡し、openURL でgoogleMapsを実行する処理は以下のように実装した。

-(void)openMaps:(id)sender {

 self.addString = txtField.text;
 NSString* addressText =self.addString; 
 
 addressText = [addressText stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
 NSString* urlText = [NSString stringWithFormat:@"http://maps.google.com/maps?q=%@",addressText];
 
 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlText]];
 
 [addString release];

}
シミュレーターには日本語キーボードがないようなので、日本語入力を試すことが出来なかった。

参考PDF:
iPhone アプリケーション チュートリアル