スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書く事で広告が消せます。

サンプルブラウザにURL入力欄を追加

「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コンポーネントをウィンドウに追加。
ピクチャ 2 ピクチャ 4

※UIWebViewの上にあるものが今回追加したUITextFieldです。

3) アウトレットをウィンドウに設置したUITextFieldと結びつける。
ピクチャ 3

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

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.アクションとアウトレットを接続する。
ピクチャ 6
pushReturn(アクションメソッド)が追加されています。

メソッド横の白丸をウィンドウのテキストフィールドにドラッグします。
ピクチャ 7
すると、どの動作と結びつけるか的なことを聞いてきます。

今回は「Did End On Exit」と結びつけます。
ピクチャ 9

編集内容を保存してシミュレータを実行してみます。
ピクチャ 10
テキストフィールドにURLを入力してreturnボタンを押下すると、

ピクチャ 11
入力したURL(今回はYahoo)に遷移します。

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

1はコード上での制御になりますね。
2、3はInterfaceBuilder上の設定でなんとかなるのでしょうか。

ではでは。

COMMENT

Name
E-mail
URL
Comment
Pass  *
Secret? (管理者にだけ表示)