iPhone Push down refresh、Refresh Controller くるくるまわってロード
皆さんこんにちわ
お元気ですか?私はスリープが嫌いになりました。睡眠じゃないです。PCです。
ええ、nohupが仕事をしなかったのですよ。大量の時間を無駄にしました。
今も動いてたらうれしいなぁ…多分日曜日に終わるか終わらないかだから、勝手に仕事してくれないと困るんです。
さて、本日はリフレッシュ機能について
あの、twitterとかで上にくいってするとくるくるまわって更新するあやつのことです。
Push down refresh とか Refresh Controllerっていうんですね。
今日はそれを実装してみましょう。
StoryBoard
プロジェクトの生成〜Navigation Controllerの配置
まずは、プロジェクトを作ります。
次に最初にあるViewを削除し、TableViewを配置する。
TableViewを選択し、Editor→Embed in →Navigation Controllerを選択。
Prototype Cells
Table View cell の identifierをCellに変更
TableView
新しくファイルを作りクラスはUITableViewを選択
Custom ClassでClassで先ほど作ったファイルのクラス名を選択
ソースコード
RefreshViewController.h
#import <UIKit/UIKit.h> @interface RefreshViewController : UITableViewController{ NSArray* StringArray; } @end
RefreshViewController.m
#import "RefreshViewController.h" @interface RefreshViewController () @end @implementation RefreshViewController - (id)initWithStyle:(UITableViewStyle)style { self = [super initWithStyle:style]; if (self) { // Custom initialization } return self; } - (void)viewDidLoad { [super viewDidLoad]; StringArray = [[NSArray alloc] initWithObjects:@"東京",@"大阪", nil]; [self.refreshControl addTarget:self action:@selector(updateRecords) forControlEvents:UIControlEventValueChanged]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return StringArray.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier]; } cell.textLabel.text = [StringArray objectAtIndex:indexPath.row]; return cell; } -(void)updateRecords{ StringArray = [[NSArray alloc] initWithObjects:@"関東",@"関西", nil]; [self.tableView reloadData]; [self.refreshControl endRefreshing]; } @end
解説
RefreshController.h
NSArrayを宣言しているだけです
RefreshController.m
ViewDidLoad
StringArrayはテーブルの要素を入れているのみです。
refreshcontrolの部分が新しいですね。
refreshcontrolで、イベントを動作をリンクさせています。
今回のメンバ関数の内容を動作として記載すると、
UIControlEventValueChangedは値が変化したときなので、refreshControlの値が変更されたときにupdateRecordsを呼び出す
ような動作を行っていると思います。厳密には違いそうですが、、、。
イベントコントロールについてはこちらに記載されていました。
http://iphone-tora.sakura.ne.jp/uicontrol.html
numberOfSectionsInTableView,numberOfRowsINSection,cellForRowAtIndexPath
相変わらずの処理ですね。セルに内容を入れてテーブルを作っています。
updateRecords
self.tableView reloadData = 新しくテーブルを作っているだけです。
self.refreshControl endRefreshing =ここで更新作業は終わりですよ。(くるくるもここで終了)
動作
こんな表示から
くるくるまわって
できあがり、文字変わりましたよね!