プログレスバーを付けてみる。今回もバインディングは使わずに実装する。
まず InterfaceBuilderで NSProgressIndicator を貼り付ける。
AppController.h へアウトレットを用意し InterfaceBuilderで接続する。
IBOutlet NSProgressIndicator* _progress;
ページの読み込み状況は WebView からの通知で知ることができる。
WebViewProgressEstimateChangedNotification
WebViewProgressFinishedNotification
WebViewProgressStartedNotification
通知を受け取るために #awakeFromNib内で、observerとして AppController自身を NSNotificationCenterへ登録する。
AppController.m
- (void)awakeFromNib
{
NSNotificationCenter* nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self
selector:@selector(processNotification:)
name:WebViewProgressStartedNotification
object:nil];
[nc addObserver:self
selector:@selector(processNotification:)
name:WebViewProgressEstimateChangedNotification
object:nil];
[nc addObserver:self
selector:@selector(processNotification:)
name:WebViewProgressFinishedNotification
object:nil];
}
通知が来たら #processNotification: メッセージが投げられるので、メソッド内でプログレスバーの値を更新する。ページ読み込み状況は WebView#estimatedProgress で取得できる。この戻り値は 0.0〜1.0 の範囲を取る(1.0=>100%完了)。
- (void)processNotification:(NSNotification *)notification
{
WebView* wv = [notification object];
[_progress setDoubleValue:[wv estimatedProgress]];
}
実行してみよう。
出た。