第4回。
今回は予定を変更して設定変更を実装します。
あまりにも文字が小さくて見づらいので。
超簡単なのでちゃっちゃと終わらせまーす。
参考
今回は、constの使い方について以下のサイトで勉強させていただきました。
結局使わなかったけど…。
svartalfheim.jp - Objective-Cについて
参考書籍は第1回をご参照下さい。
素材
引き続き、Soft * Accessory様の素材をお借りしています。
1. 設定画面の追加
設定画面はアプリ独自で持つこともできるのですが、
アップル的にはデフォルトの設定アプリの方に統一したいらしいので、
ここではそれに従います。
手順は以下のとおり。
XMLファイルを作るだけで画面作ってくれて非常に簡単です。
(1) 設定ファイルの作成
グループとファイルのResourcesを右クリック。
追加 → 新規ファイル → iPhone OS → Resouce → Settings Bundleを選択。
デフォルトのまま次へ進めば完了。
(2) 設定項目の作成
Resources内のRoot.plistを編集します。
今回はフォントや色・サイズを選択させるので、PSMultiValueSpecifierを使います。
完成したファイルがこちら。
※ fontはとりあえず使えるやつ全部を一覧化。
sizeは10から50まで2刻みで用意してます。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>StringsTable</key>
<string>Root</string>
<key>PreferenceSpecifiers</key>
<array>
<dict>
<key>Type</key>
<string>PSGroupSpecifier</string>
<key>Title</key>
<string>Color</string>
</dict>
<dict>
<key>Type</key>
<string>PSMultiValueSpecifier</string>
<key>Title</key>
<string>Text Color</string>
<key>Key</key>
<string>textColor</string>
<key>DefaultValue</key>
<integer>0</integer>
<key>Values</key>
<array>
<integer>0</integer>
<integer>1</integer>
<integer>2</integer>
<integer>3</integer>
<integer>4</integer>
<integer>5</integer>
<integer>6</integer>
<integer>7</integer>
<integer>8</integer>
<integer>9</integer>
<integer>10</integer>
<integer>11</integer>
<integer>12</integer>
<integer>13</integer>
</array>
<key>Titles</key>
<array>
<string>Black</string>
<string>DarkGray</string>
<string>LightGray</string>
<string>White</string>
<string>Gray</string>
<string>Red</string>
<string>Green</string>
<string>Blue</string>
<string>Cyan</string>
<string>Yellow</string>
<string>Magenta</string>
<string>Orange</string>
<string>Purple</string>
<string>Brown</string>
</array>
</dict>
<dict>
<key>Type</key>
<string>PSMultiValueSpecifier</string>
<key>Title</key>
<string>Background Color</string>
<key>Key</key>
<string>backgroundColor</string>
<key>DefaultValue</key>
<integer>3</integer>
<key>Values</key>
<array>
<integer>0</integer>
<integer>1</integer>
<integer>2</integer>
<integer>3</integer>
<integer>4</integer>
<integer>5</integer>
<integer>6</integer>
<integer>7</integer>
<integer>8</integer>
<integer>9</integer>
<integer>10</integer>
<integer>11</integer>
<integer>12</integer>
<integer>13</integer>
</array>
<key>Titles</key>
<array>
<string>Black</string>
<string>DarkGray</string>
<string>LightGray</string>
<string>White</string>
<string>Gray</string>
<string>Red</string>
<string>Green</string>
<string>Blue</string>
<string>Cyan</string>
<string>Yellow</string>
<string>Magenta</string>
<string>Orange</string>
<string>Purple</string>
<string>Brown</string>
</array>
</dict>
<dict>
<key>Type</key>
<string>PSGroupSpecifier</string>
<key>Title</key>
<string>Font</string>
</dict>
<dict>
<key>Type</key>
<string>PSMultiValueSpecifier</string>
<key>Title</key>
<string>Font Name</string>
<key>Key</key>
<string>fontName</string>
<key>DefaultValue</key>
<string>Helvetica</string>
<key>Values</key>
<array>
<string>AcademyEngravedLetPlain</string>
<string>AmericanTypewriter</string>
<string>AmericanTypewriter-Bold</string>
<string>AppleGothic</string>
<string>Arial-BoldItalicMT</string>
<string>Arial-BoldMT</string>
<string>Arial-ItalicMT</string>
<string>ArialHebrew</string>
<string>ArialHebrew-Bold</string>
<string>ArialMT</string>
<string>ArialRoundedMTBold</string>
<string>Baskerville</string>
<string>Baskerville-Bold</string>
<string>Baskerville-BoldItalic</string>
<string>Baskerville-Italic</string>
<string>BodoniOrnamentsITCTT</string>
<string>BodoniSvtyTwoITCTT-Bold</string>
<string>BodoniSvtyTwoITCTT-Book</string>
<string>BodoniSvtyTwoITCTT-BookIta</string>
<string>BodoniSvtyTwoOSITCTT-Bold</string>
<string>BodoniSvtyTwoOSITCTT-Book</string>
<string>BodoniSvtyTwoOSITCTT-BookIt</string>
<string>BodoniSvtyTwoSCITCTT-Book</string>
<string>BradleyHandITCTT-Bold</string>
<string>Chalkduster</string>
<string>Cochin</string>
<string>Cochin-Bold</string>
<string>Cochin-BoldItalic</string>
<string>Cochin-Italic</string>
<string>Copperplate</string>
<string>Copperplate-Bold</string>
<string>Courier</string>
<string>Courier-Bold</string>
<string>Courier-BoldOblique</string>
<string>Courier-Oblique</string>
<string>CourierNewPS-BoldItalicMT</string>
<string>CourierNewPS-BoldMT</string>
<string>CourierNewPS-ItalicMT</string>
<string>CourierNewPSMT</string>
<string>DBLCDTempBlack</string>
<string>Didot</string>
<string>Didot-Bold</string>
<string>Didot-Italic</string>
<string>Futura-CondensedExtraBold</string>
<string>Futura-Medium</string>
<string>Futura-MediumItalic</string>
<string>GeezaPro</string>
<string>GeezaPro-Bold</string>
<string>Georgia</string>
<string>Georgia-Bold</string>
<string>Georgia-BoldItalic</string>
<string>Georgia-Italic</string>
<string>GillSans</string>
<string>GillSans-Bold</string>
<string>GillSans-BoldItalic</string>
<string>GillSans-Italic</string>
<string>Helvetica</string>
<string>Helvetica-Bold</string>
<string>Helvetica-BoldOblique</string>
<string>Helvetica-Oblique</string>
<string>HelveticaNeue</string>
<string>HelveticaNeue-Bold</string>
<string>HelveticaNeue-BoldItalic</string>
<string>HelveticaNeue-Italic</string>
<string>HiraKakuProN-W3</string>
<string>HiraKakuProN-W6</string>
<string>HiraMinProN-W3</string>
<string>HiraMinProN-W6</string>
<string>HoeflerText-Black</string>
<string>HoeflerText-BlackItalic</string>
<string>HoeflerText-Italic</string>
<string>HoeflerText-Regular</string>
<string>MarkerFelt-Thin</string>
<string>MarkerFelt-Wide</string>
<string>Optima-Bold</string>
<string>Optima-BoldItalic</string>
<string>Optima-Italic</string>
<string>Optima-Regular</string>
<string>Palatino-Bold</string>
<string>Palatino-BoldItalic</string>
<string>Palatino-Italic</string>
<string>Palatino-Roman</string>
<string>Papyrus</string>
<string>PartyLetPlain</string>
<string>STHeitiJ-Light</string>
<string>STHeitiJ-Medium</string>
<string>STHeitiK-Light</string>
<string>STHeitiK-Medium</string>
<string>STHeitiSC-Light</string>
<string>STHeitiSC-Medium</string>
<string>STHeitiTC-Light</string>
<string>STHeitiTC-Medium</string>
<string>SnellRoundhand</string>
<string>SnellRoundhand-Bold</string>
<string>Thonburi</string>
<string>Thonburi-Bold</string>
<string>TimesNewRomanPS-BoldItalicMT</string>
<string>TimesNewRomanPS-BoldMT</string>
<string>TimesNewRomanPS-ItalicMT</string>
<string>TimesNewRomanPSMT</string>
<string>Trebuchet-BoldItalic</string>
<string>TrebuchetMS</string>
<string>TrebuchetMS-Bold</string>
<string>TrebuchetMS-Italic</string>
<string>Verdana</string>
<string>Verdana-Bold</string>
<string>Verdana-BoldItalic</string>
<string>Verdana-Italic</string>
<string>ZapfDingbatsITC</string>
<string>Zapfino</string>
</array>
<key>Titles</key>
<array>
<string>AcademyEngravedLetPlain</string>
<string>AmericanTypewriter</string>
<string>AmericanTypewriter-Bold</string>
<string>AppleGothic</string>
<string>Arial-BoldItalicMT</string>
<string>Arial-BoldMT</string>
<string>Arial-ItalicMT</string>
<string>ArialHebrew</string>
<string>ArialHebrew-Bold</string>
<string>ArialMT</string>
<string>ArialRoundedMTBold</string>
<string>Baskerville</string>
<string>Baskerville-Bold</string>
<string>Baskerville-BoldItalic</string>
<string>Baskerville-Italic</string>
<string>BodoniOrnamentsITCTT</string>
<string>BodoniSvtyTwoITCTT-Bold</string>
<string>BodoniSvtyTwoITCTT-Book</string>
<string>BodoniSvtyTwoITCTT-BookIta</string>
<string>BodoniSvtyTwoOSITCTT-Bold</string>
<string>BodoniSvtyTwoOSITCTT-Book</string>
<string>BodoniSvtyTwoOSITCTT-BookIt</string>
<string>BodoniSvtyTwoSCITCTT-Book</string>
<string>BradleyHandITCTT-Bold</string>
<string>Chalkduster</string>
<string>Cochin</string>
<string>Cochin-Bold</string>
<string>Cochin-BoldItalic</string>
<string>Cochin-Italic</string>
<string>Copperplate</string>
<string>Copperplate-Bold</string>
<string>Courier</string>
<string>Courier-Bold</string>
<string>Courier-BoldOblique</string>
<string>Courier-Oblique</string>
<string>CourierNewPS-BoldItalicMT</string>
<string>CourierNewPS-BoldMT</string>
<string>CourierNewPS-ItalicMT</string>
<string>CourierNewPSMT</string>
<string>DBLCDTempBlack</string>
<string>Didot</string>
<string>Didot-Bold</string>
<string>Didot-Italic</string>
<string>Futura-CondensedExtraBold</string>
<string>Futura-Medium</string>
<string>Futura-MediumItalic</string>
<string>GeezaPro</string>
<string>GeezaPro-Bold</string>
<string>Georgia</string>
<string>Georgia-Bold</string>
<string>Georgia-BoldItalic</string>
<string>Georgia-Italic</string>
<string>GillSans</string>
<string>GillSans-Bold</string>
<string>GillSans-BoldItalic</string>
<string>GillSans-Italic</string>
<string>Helvetica</string>
<string>Helvetica-Bold</string>
<string>Helvetica-BoldOblique</string>
<string>Helvetica-Oblique</string>
<string>HelveticaNeue</string>
<string>HelveticaNeue-Bold</string>
<string>HelveticaNeue-BoldItalic</string>
<string>HelveticaNeue-Italic</string>
<string>HiraKakuProN-W3</string>
<string>HiraKakuProN-W6</string>
<string>HiraMinProN-W3</string>
<string>HiraMinProN-W6</string>
<string>HoeflerText-Black</string>
<string>HoeflerText-BlackItalic</string>
<string>HoeflerText-Italic</string>
<string>HoeflerText-Regular</string>
<string>MarkerFelt-Thin</string>
<string>MarkerFelt-Wide</string>
<string>Optima-Bold</string>
<string>Optima-BoldItalic</string>
<string>Optima-Italic</string>
<string>Optima-Regular</string>
<string>Palatino-Bold</string>
<string>Palatino-BoldItalic</string>
<string>Palatino-Italic</string>
<string>Palatino-Roman</string>
<string>Papyrus</string>
<string>PartyLetPlain</string>
<string>STHeitiJ-Light</string>
<string>STHeitiJ-Medium</string>
<string>STHeitiK-Light</string>
<string>STHeitiK-Medium</string>
<string>STHeitiSC-Light</string>
<string>STHeitiSC-Medium</string>
<string>STHeitiTC-Light</string>
<string>STHeitiTC-Medium</string>
<string>SnellRoundhand</string>
<string>SnellRoundhand-Bold</string>
<string>Thonburi</string>
<string>Thonburi-Bold</string>
<string>TimesNewRomanPS-BoldItalicMT</string>
<string>TimesNewRomanPS-BoldMT</string>
<string>TimesNewRomanPS-ItalicMT</string>
<string>TimesNewRomanPSMT</string>
<string>Trebuchet-BoldItalic</string>
<string>TrebuchetMS</string>
<string>TrebuchetMS-Bold</string>
<string>TrebuchetMS-Italic</string>
<string>Verdana</string>
<string>Verdana-Bold</string>
<string>Verdana-BoldItalic</string>
<string>Verdana-Italic</string>
<string>ZapfDingbatsITC</string>
<string>Zapfino</string>
</array>
</dict>
<dict>
<key>Type</key>
<string>PSMultiValueSpecifier</string>
<key>Title</key>
<string>Font Size</string>
<key>Key</key>
<string>fontSize</string>
<key>DefaultValue</key>
<integer>16</integer>
<key>Values</key>
<array>
<integer>10</integer>
<integer>12</integer>
<integer>14</integer>
<integer>16</integer>
<integer>18</integer>
<integer>20</integer>
<integer>22</integer>
<integer>24</integer>
<integer>26</integer>
<integer>28</integer>
<integer>30</integer>
<integer>32</integer>
<integer>34</integer>
<integer>36</integer>
<integer>38</integer>
<integer>40</integer>
<integer>42</integer>
<integer>44</integer>
<integer>46</integer>
<integer>48</integer>
<integer>50</integer>
</array>
<key>Titles</key>
<array>
<string>10</string>
<string>12</string>
<string>14</string>
<string>16</string>
<string>18</string>
<string>20</string>
<string>22</string>
<string>24</string>
<string>26</string>
<string>28</string>
<string>30</string>
<string>32</string>
<string>34</string>
<string>36</string>
<string>38</string>
<string>40</string>
<string>42</string>
<string>44</string>
<string>46</string>
<string>48</string>
<string>50</string>
</array>
</dict>
</array>
</dict>
</plist>
ここまでで自動的に設定画面ができちゃいます。
2. 設定変更の実装
さっき作った画面で設定した内容をアプリに反映させます。
今回の設定は全てTextViewに関するものなので、
DetailControllerのinit内で以下のように読み込み・設定しています。
NSUserDefaults* settings = [NSUserDefaults standardUserDefaults];
// defaultを設定してもnullが返ってくるので、0やNOがdefaultじゃない場合処理が必要。
NSInteger textColor = [settings integerForKey:@"textColor"];
NSInteger backgroundColor = [settings objectForKey: @"backgroundColor"] != NULL ? [settings integerForKey:@"backgroundColor"] : 3;
NSString *fontName = [settings objectForKey: @"fontName"] != NULL ? [settings stringForKey:@"fontName"] : @"Helvetica";
NSInteger fontSize = [settings objectForKey: @"fontSize"] != NULL ? [settings integerForKey:@"fontSize"] : 16;
textView_.font = [UIFont fontWithName:fontName size:fontSize];
textView_.textColor = [self getColorWithIndex:textColor];
textView_.backgroundColor = [self getColorWithIndex:backgroundColor];
[完成]
できました。
[まとめ]
これで目を凝らして小さい字を読まなくても良くなりました。
今回は簡単だったので、次はもうちょっとプログラミングらしいことをやろうと思います。
[コード]
今回のコードは「Edhita4.zip」に入っています。
GitHubのdownloadページからダウンロードして下さい。
Downloads for tnantoka's Edhita - GitHub
PR