ウェブブラウザのアクションメソッド

2010. 05. 14
基礎からのiPhone SDK 改訂版』のウェブブラウザで設定したアクションは5つ有ります。

1)バックボタン
2)フォワードボタン
3)リフレッシュボタン
4)ストップボタン
5)URLテキストフィールドへの入力


●UIWebViewの持つアクションメソッド

この内1~4のボタンに対するアクションは、WebAppDelegate.hで宣言することなく、Interface BuilderでUIWebViewを設置しただけでアクションが表示されており、UIWebViewがデフォルトで持っているようです。

実際、goBack、goForward、reload、stopLoadingはUIWebViewクラスのインスタンスメソッドなのですが、WebAppDelegate.mで記述していません。

この4つのメソッドは、引数も戻り値もオプションも無いメソッドなので拡張のしようも無く、コードを記述する必要無く利用できるようです。

300


・goBack

- (void)goBack

閲覧履歴の前の場所を読み込みます

301


・goForward

- (void)goForward

閲覧履歴の次の場所を読み込みます

302


・reload

- (void)reload

現在のページを再読み込みします

303


・stopLoading

- (void)stopLoading

レシーバの管理するウェブコンテンツの読み込みを停止します

メインフレームまたは子フレームで読み込まれているプロセスを停止します

読み込み中のコンテンツが無い場合は何もしません

304


●URLテキストフィールドへの入力のアクション

URLテキストフィールドの入力はアプリケーション独自の処理なので、WebAppDelegateにアクションメソッドを記述します。

305


・WebAppDelegate.hでの宣言

- (IBAction)loadUrl:(id)sender;

IBActionはInterface Builderで認識できるようにするための型で、中身はvoidです。

引数のsenderは送信側のオブジェクト(UITextField)で、どんなObjective-Cオブジェクトでも受け付けられるid型になっています。
(型指定することもできます)


・Interface Builderでの接続

DocumentウィンドウのWeb App Delegateを右クリックしてConnectionsパネルを開く、またはInspectorウィンドウのConnectionsタブを開いて、Recived ActionsのloadUrl:メソッドをViewウィンドウのテキストフィールドに接続します。

289

306


・WebAppDelegate.mでの実装

テキストフィールドから入力したテキストを、NSString、NSURL、NSURLRequestと変換して、ウェブビューに読み込んでいますが、この辺の詳細は『URL Loading System Programming Guide』に書かれているらしく、さすがにまるごと訳すのは辛いので追々勉強したいと思います。
(それに伴い、NSURLRequestCachePolicyの解説も理解できていないので省略させていただきます)

- (IBAction)loadUrl:(UITextField *)sender {

    // テキストフィールドから文字列を取得する
    NSString *urlStr = [sender text];
    
    // 文字列からURLクラスのインスタンスを生成する
    NSURL *url = [NSURL URLWithString:urlStr];
    
    // URLからURLリクエストのインスタンスを生成する
    NSURLRequest *urlReq = [NSURLRequest requestWithURL:url];
    
    // ウィブビューにウェブページ読み込みを指示する
    [webView loadRequest:urlReq];
}


・text
(UITextFieldクラス)

@property(nonatomic, copy) NSString *text

テキストフィールドのテキストを表します

この文字列のデフォルトはnilです


・URLWithString:
(NSURLクラス)

+ (id)URLWithString:(NSString *)URLString

指定した文字列で初期化したNSURLオブジェクトを生成して返します

指定した文字列が異形の場合はnilを返します

このメソッドの引数URLStringは、パーセントエスケープコード( : 、 / 、 % 、 # 、 ; 、 @ )を含むことを必須としています。

注:パーセントエスケープコードは事前にUTF-8に変換しておく必要が有ります

URLString:NSURLオブジェクトとして初期化する文字列を指定します
RFC 2396に準拠している必要があります
このメソッドの引数URLStringは、RFC 1738と1808に従います

RFC 2396は、URI(Uniform Resource Identifiers。統一資源識別子)を規定しているもので、インターネット上にある情報(資源)を指し示す書式のことです。

RFC 1738は、URL(Uniform Resource Locators。統一資源位置指定子)を規定していて、URIの中で場所を指し示す書式です。

RFC 1808は、Relative Uniform Resource Locators(相対URL)を規定しており、自サイト内でのリンクを張る際に『http://~』から始まる絶対URLではなく、『../~』という自サイトを基準にした相対的な場所を指し示す書式です。

例えば、2バイト文字を含むURL

http://www.nicovideo.jp/tag/メカ千早

を引数URLStringに渡しても弾かれてしまいます。
この場合、%で始まるコード

http://www.nicovideo.jp/tag/%E3%83%A1%E3%82%AB%E5%8D%83%E6%97%A9

に変換してURLStringに渡す必要があるという話です。

(あまり評判の良くないメソッドですが)– stringByAddingPercentEscapesUsingEncoding:メソッドでテキストフィールドの文字列を変換すると、『http://www.nicovideo.jp/tag/メカ千早』と入力しても正常に処理されます。
(読み込み完了後のURL表記は『http://www.nicovideo.jp/tag/%E3%83%A1%E3%82%AB%E5%8D%83%E6%97%A9』になります)

    // テキストフィールドから文字列を取得する
    NSString *urlStrTmp = [sender text];
    
    // 受け取った文字列をUTF-8エンコーディングで変換する
    NSString *urlStr = [urlStrTmp stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];


・requestWithURL:
(NSURLRequestクラス)

+ (id)requestWithURL:(NSURL *)theURL

デフォルトのキャッシュポリシーとタイムアウト値で、指定されたURLのURLリクエストを生成して返します

デフォルトのキャッシュポリシーはNSURLRequestUseProtocolCachePolicyで、デフォルトのタイムアウト間隔は60秒です

theURL:新しいリクエストのURLを指定します


・loadRequest:
(UIWebViewクラス)

- (void)loadRequest:(NSURLRequest *)request

指定したクライアントのリクエストで、非同期の接続を開始します

読み込みを停止するにはstopLoadingメソッドを使用してください

レシーバがコンテンツを読み込み状態を見るには、loadingプロパティを使用してください



参考文献

UIWebView Class Reference

UITextField Class Reference

NSURL Class Reference

NSURLRequest Class Reference

Wikipedia/Uniform Resource Identifiers

Wikipedia/Uniform Resource Locator

Wikipedia/相対URL

基礎からのiOS SDK基礎からのiOS SDK
(2010/10/09)
鶴薗 賢吾、松浦 健一郎 他

商品詳細を見る






Lifestyle 650 home entertainment system
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
10 | 2017/11 | 12
Sun Mon Tue Wed Thu Fri Sat
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

Lifestyle 650 home entertainment system
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR