日々の記録。

プログラミングのメモや感じた事などを記録。

iOSのアプリによくある設定用のテーブルをデータ化する その2

iOSのアプリによくある設定用のテーブルをデータ化する の続きです。

iPhoneで良く見かける、こんな感じの画面をデータ化してみた。

最終的には、リソースファイルなどで定義できるようにすることが目標だけど、現時点では次の ように、ソースコード上でデータを定義している。

self.settingList = [[SettingList alloc] init];
SettingCongrollerFactory* factory = [[SettingCongrollerFactory alloc] init];

NSInteger tag = 1;
Setting* setting = [factory createBoolSetting:@"repeat" tag:tag++];
[self.settingList addSetting:setting];
        
setting = [factory createBoolSetting:@"isRandam" tag:tag++];
[self.settingList addSetting:setting];
        
setting = [factory createSelectSetting:@"playmode" tag:tag++ values:
              [NSArray arrayWithObjects:
                    @"normal",
                    @"album",
                    @"repeat",
                    nil]];
[setting setValue:@"normal"];
[self.settingList addSetting:setting];
        
setting = [factory createBoolSetting:@"sleep mode" tag:tag++];
[self.settingList addSetting:setting];

現在のところ、boolと値(object)の選択のみに対応。次は数値設定にトライしたい。


実装のイメージとしては次の通り

  • settingオブジェクトは、1設定項目の値を表現している。
  • settingオブジェクトは、型に対応するsettingControllerオブジェクトを所有する。
  • settingControllerオブジェクトは、tableViewCellとsettingの仲介を行う。(tableViewCellへの値の表示。tableViewCellからの操作をsettingへ通知。settingの値の変更をviewへ通知)
  • settingListはUITableViewDataSourceと同等の責務を持つ。(section数やrow数,indexPathに対応するsettingを返すなど)

下図は、画面とオブジェクトの対応

興味のある方はgithubからソースコードをダウンロードできます