在Android手機上, 在某個程式里,通過按Menu鍵,一般都會打開這個程式的設置,而在iOS里,系統提供了一個很好的保存程式設置的機制。就是使用Settings Bundle。 在按了HOME鍵的情況下,在第一頁的圖標中找到設置,會看到程式的設置都在這裡。那如何添加自己的程式的設置項呢? 1、添 ...
在Android手機上, 在某個程式里,通過按Menu鍵,一般都會打開這個程式的設置,而在iOS里,系統提供了一個很好的保存程式設置的機制。就是使用Settings Bundle。
在按了HOME鍵的情況下,在第一頁的圖標中找到設置,會看到程式的設置都在這裡。那如何添加自己的程式的設置項呢?
1、添加設置項
預設情況下,新建的項目程式是沒有設置項的。新建一個項目,命名為 SettingsBundleDemo,選擇Single View App模版創建。項目創建完成,在項目里選擇創建新文件,
選擇Resource 中的Settings Bundle,創建。
再給程式添加一個icon。運行。按home鍵,打開設置,看到設置里多了一項,SettingsBundleDemo。這就為程式添加了一個設置。
2、設置的控制項
預設的生成的設置項里有這個幾個控制項。
分別是:Group分組,文本框,Slider,開關控制項幾個控制項。
設置想能使用的控制項如下:
設置控制項 | 類型 |
---|---|
文本框 | PSTextFieldSpecifier |
文字 | PSTitleValueSpecifier |
開關控制項 | PSToggleSwitchSpecifier |
Slider | PSSliderSpecifier |
Multivalue | PSMultiValueSpecifier |
Group | PSGroupSpecifier |
子面板 | PSChildPaneSpecifier . |
3、編輯設置項的文件
展開Settings.bundle,其中包含一個Root.plist。Settings程式中的顯示項就是從Root.plist中獲取的。單擊Root.plist以打開它,在空白處單擊,選中Show Raw Keys/Values:
我們把原有的項刪掉,添加自己的設置項,添加如下:
對應的plist源文件是這樣的:如果你覺得自己手工輸入這些項很慢,可以把下麵的源文件拷貝到Root.plist里,用源代碼打開方式就可以編輯了。
[html] view plain copy
- <?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>PreferenceSpecifiers</key>
- <array>
- <dict>
- <key>Type</key>
- <string>PSGroupSpecifier</string>
- <key>Title</key>
- <string>個人信息</string>
- <key>Key</key>
- <string></string>
- </dict>
- <dict>
- <key>Type</key>
- <string>PSTextFieldSpecifier</string>
- <key>Title</key>
- <string>姓名</string>
- <key>Key</key>
- <string>username</string>
- </dict>
- <dict>
- <key>Type</key>
- <string>PSMultiValueSpecifier</string>
- <key>Values</key>
- <array>
- <string>football</string>
- <string>basketball</string>
- <string>pingpong</string>
- </array>
- <key>Title</key>
- <string>愛好</string>
- <key>Titles</key>
- <array>
- <string>足球</string>
- <string>籃球</string>
- <string>乒乓球</string>
- </array>
- <key>Key</key>
- <string>aihao</string>
- <key>DefaultValue</key>
- <string>football</string>
- </dict>
- <dict>
- <key>FalseValue</key>
- <string>NO</string>
- <key>TrueValue</key>
- <true/>
- <key>DefaultValue</key>
- <false/>
- <key>Type</key>
- <string>PSToggleSwitchSpecifier</string>
- <key>Title</key>
- <string>婚姻狀況</string>
- <key>Key</key>
- <string>maritalStatus</string>
- </dict>
- <dict>
- <key>Type</key>
- <string>PSGroupSpecifier</string>
- <key>Title</key>
- <string>等級</string>
- <key>Key</key>
- <string></string>
- </dict>
- <dict>
- <key>DefaultValue</key>
- <integer>5</integer>
- <key>MaximumValue</key>
- <integer>10</integer>
- <key>MinimumValue</key>
- <integer>1</integer>
- <key>Type</key>
- <string>PSSliderSpecifier</string>
- <key>Title</key>
- <string>等級</string>
- <key>Key</key>
- <string>levelState</string>
- </dict>
- </array>
- <key>StringsTable</key>
- <string>Root</string>
- </dict>
- </plist>
這時候運行,在來到設置項看:
已經是我們自己設置的效果了。
4、在程式中獲取Settings 和寫入Settings 添加UI
這裡的項目是設置好了,那怎麼讀取呢?我們先在程式里添加一些對應的UI.打開.xib文件,往裡放置控制項,並生成對應的映射和Action。
pickerView的使用請參考iOS學習之UIPickerView控制項的簡單使用這篇文章。
5、實現讀取設置和保存代碼
關鍵是通過: NSUserDefaults *defaults = [NSUserDefaultsstandardUserDefaults];
代碼獲取設置項的NSUserDefaults值,然後通過key獲取設置的內容和保存設置內容
在兩個Button的按下事件實現如下:
[cpp] view plain copy
- - (IBAction)getSettings:(id)sender {
- NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
- username.text = [defaults objectForKey:@"username"];
- selectedAihao = [defaults objectForKey:@"aihao"];
- NSLog(@"aihao:%@",selectedAihao);
- NSInteger aihaoIndex = [aihaoValues indexOfObject:selectedAihao];
- [pickerView selectRow:aihaoIndex inComponent:0 animated:YES];
- [level setValue:[defaults integerForKey:@"levelState"]];
- }
- - (IBAction)setSettings:(id)sender {
- NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
- [defaults setValue:username.text forKey:@"username"];
- NSInteger aihaoIndex = [aihaoTitles indexOfObject:selectedAihao];
- [defaults setValue:[aihaoValues objectAtIndex:aihaoIndex] forKey:@"aihao"];
- [defaults setInteger:level.value forKey:@"levelState"];
- UIAlertView *alert = [[UIAlertView alloc]
- initWithTitle:@"偏好設置"
- message:@"偏好設置已經保存!"
- delegate:nil
- cancelButtonTitle: @"完成"
- otherButtonTitles:nil];
- [alert show];
- }
頭文件實現:
[cpp] view plain copy
- #import <UIKit/UIKit.h>
- @interface ViewController : UIViewController<UIPickerViewDelegate, UIPickerViewDataSource>
- {
- NSMutableArray *aihaoTitles;
- NSMutableArray *aihaoValues;
- NSString *selectedAihao;
- }
- @property (strong, nonatomic) IBOutlet UITextField *username;
- @property (strong, nonatomic) IBOutlet UIPickerView *pickerView;
- @property (strong, nonatomic) IBOutlet UISlider *level;
- - (IBAction)getSettings:(id)sender;
- - (IBAction)setSettings:(id)sender;
- - (IBAction)doneEdit:(id)sender;
- @end
.m文件中其他代碼:
[cpp] view plain copy
- #import "ViewController.h"
- @interface ViewController ()
- @end
- @implementation ViewController
- @synthesize username;
- @synthesize pickerView;
- @synthesize level;
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- aihaoTitles = [[NSMutableArray alloc] init];
- [aihaoTitles addObject:@"足球"];
- [aihaoTitles addObject:@"籃球"];
- [aihaoTitles addObject:@"乒乓球"];
- aihaoValues = [[NSMutableArray alloc] init];
- [aihaoValues addObject:@"football"];
- [aihaoValues addObject:@"basketball"];
- [aihaoValues addObject:@"pingpong"];
- // Do any additional setup after loading the view, typically from a nib.
- }
- - (void)viewDidUnload
- {
- [self setUsername:nil];
- [self setPickerView:nil];
- [self setLevel:nil];
- [super viewDidUnload];
- // Release any retained subviews of the main view.
- }
- - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
- {
- return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
- }
- -(NSInteger) numberOfComponentsInPickerView:(UIPickerView *)pickerView
- {
- return 1;
- }
- -(NSInteger) pickerView:(UIPickerView *)pickerView
- numberOfRowsInComponent:(NSInteger)component
- {
- return [aihaoTitles count];
- }
- -(NSString *) pickerView:(UIPickerView *)pickerView
- titleForRow:(NSInteger)row
- forComponent:(NSInteger)component
- {
- return [aihaoTitles objectAtIndex:row];
- }
- -(void) pickerView:(UIPickerView *)pickerView
- didSelectRow:(NSInteger)row
- inComponent:(NSInteger)component
- {
- selectedAihao = [aihaoTitles objectAtIndex:row];
- }
- - (IBAction)doneEdit:(id)sender{
- }
運行,輸入姓名zhongguo 和愛好 足球,選擇等級,保存設置。打開設置查看,可以讀取到保存後的設置。
這樣就可以操作和這隻程式的設置項了。
例子代碼:http://download.csdn.net/detail/totogo2010/4398462
參考資料:http://blog.csdn.net/totogo2010/