「UIWebViewを使ったサンプルブラウザ」の記事でWEBページの表示には成功したのですが。
表示するWEBページのURLを決め打っているのでブラウザとしては成り立っていません。
とりあえず今回は入力したURLに遷移できるよう拡張してみようと思います。
URL入力用テキストフィールドと、入力したURLへ遷移する用ボタンを追加する予定でした。
が、調べてみるとテキストフィールド入力時に使用するソフトウェアキーボードの決定?確定?ボタンに動作をカスタマイズで設定(実装)できるっぽいです。
※ソースコードは「UIWebViewを使ったサンプルブラウザ」をそのまま引き継いでいます。
1.とりあえずはURL入力用のテキストフィールドを追加。
1) BrowserAppDelegate.hにUITextFieldをIBOutletメンバとして追加。
@interface BrowserAppDelegate : NSObject {
UIWindow *window;
UIWebView *webView;
UITextField *textField;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UIWebView *webView;
@property (nonatomic, retain) IBOutlet UITextField *textField;
@end
2) InterfaceBuilderでUITextFieldコンポーネントをウィンドウに追加。
※UIWebViewの上にあるものが今回追加したUITextFieldです。
3) アウトレットをウィンドウに設置したUITextFieldと結びつける。

この状態で編集内容を保存しシミュレータを起動してみます。
テキストフィールドが表示され文字も入力できますが、このままでは何も起きません。

returnボタン押下時にテキストフィールドに入力したURLに遷移するよう修正します。
4.アクションメソッドの追加
returnボタン押下時の処理を行うメソッドを追加します。
BrowserAppDelegate.hにメソッドの定義を追加。
@interface BrowserAppDelegate : NSObject {
UIWindow *window;
UIWebView *webView;
UITextField *textField;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UIWebView *webView;
@property (nonatomic, retain) IBOutlet UITextField *textField;
-(IBAction)pushReturn:(UITextField*)sender;
@end
入力したURL情報を必要とするため、UITextField型の引数を持っています。
BrowserAppDelgate.mにメソッドの実装を追加。
@implementation BrowserAppDelegate
@synthesize window;
- (void)loadURL:(NSString*)url {
NSURLRequest *request =
[NSURLRequest requestWithURL:[NSURL URLWithString:url]];
[webView loadRequest:request];
}
- (void)applicationDidFinishLaunching:(UIApplication *)application {
// Override point for customization after application launch
[self loadURL:@"http://www.google.co.jp"];
[window makeKeyAndVisible];
}
- (IBAction)pushReturn:(UITextField*)sender {
[self loadURL:[sender text]];
}
- (void)dealloc {
[window release];
[webView release];
[super dealloc];
}
@end
※冗長な箇所は別メソッドとして切り出しました。
5.アクションとアウトレットを接続する。

pushReturn(アクションメソッド)が追加されています。
メソッド横の白丸をウィンドウのテキストフィールドにドラッグします。

すると、どの動作と結びつけるか的なことを聞いてきます。
今回は「Did End On Exit」と結びつけます。

編集内容を保存してシミュレータを実行してみます。

テキストフィールドにURLを入力してreturnボタンを押下すると、

入力したURL(今回はYahoo)に遷移します。
入力したURLに遷移するというブラウザとして最低限の機能を備えました。
が、当然まだまだダメダメです。
とりあえず今回実装した箇所に関して感じたことは。
1) 存在しないURLを入力した時に画面に変化が無い。
→レスポンスのHTTPステータスで画面を制御したい。
2) ソフトウェアキーボドでURLを入力し難い。
→コロンやスラッシュ、ピリオドをアルファベットと同じボード上で入力したい。
3) テキストフィールドをクリックすると入力されていた内容がクリアされてしまう。
→入力した内容はそのまま保持しておきたい。
1はコード上での制御になりますね。
2、3はInterfaceBuilder上の設定でなんとかなるのでしょうか。
ではでは。