系統設置內添加應用設置Setting的實現

有很多應用都在iOS設置中有相關的設置,如下圖:

   


通過這個設置可以方便的對應用的一些基本的設置進行更改。

要完整的實現這個設置功能,有以下幾方面問題需要解決:

1)設置的編寫(實現設置的功能)

2)設置內容的存儲(保證設置經過更改後能立即生效。比如最小化應用,然後在設置中更改,重新打開應用,應該顯示新的設置方式)


關於這方面的內容可以參考蘋果開發文檔:Preferences and Settings Programming Guide

下面說一下實現過程:


STEP 1:編寫設置

通過Settings Bundle來實現。

1) 新建一個Settings Bundle:


創建好後可以看到如下內容:


我們可以看到,settings bundle裏面包含了兩個文件,一個是Root.plist用於設置要設置的內容,另一個Root.strings用於多語言化。我們現在不考慮多語言化的內容,只看Root.plist的設置方法。

我們看到Root.plist文件裏面已經預先有幾個item,這些就是要設置的內容。一共有7種類型:


這些很好理解,除了Child pane都是一些控件,只是這裏通過plist文件來實現。Child pane是子頁面,可能相對麻煩一點。先說一下前面幾個。


首先看一下要的效果:



1)Group

設置如下:


2)Text Field

設置如下:


這裏的identifier就是之後存儲需要用到的Key,就是利用NSUserDefaults,之後介紹。

然後Text Field is Secure這個選項就是設置是否加密。其他都很容易理解。

3)Toggle Switch


4)Slider


可以添加左右圖片

5)Multi Value


設置如下:



下面介紹一下Child Pane的使用。

要添加新的設置頁面,需要創建新的plist。


上圖摘自開發文檔,可以很清楚的看出結構。

因此我們需要創建新的plist文件。

關鍵點在於我們不能在Xcode中創建,因爲在Xcode中我們無法將文件拉進bundle裏面,因此,最簡單的方法就是,打開bundle的文件管理器,然後複製Root.plist,再改名!!!



接下來是設置Child Pane:


filename就是新的plist的名稱,無需加後綴。

然後在Child.plist的編輯和Root.plist一樣。關鍵點在於爲了編輯方便,應該將Child.plist的類型設置爲iPhone Settings plist



OK,通過上面的方法,我們就可以在界面上完成需要的設置功能。下面是進行數據的操作。


STEP 2:使用NSUserDefaults實現preference的存儲。

首先明確的是上面的Setting的數據將存儲在NSUserDefaults中StandardDefaults當中,每個設置對應的identifier就是Key。


1)一般我們需要設置一些初始數據,也就是應用第一次打開就能將數據進行初始默認設置。

代碼:

[plain] view plaincopy
  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  
  2. {  
  3.     // Override point for customization after application launch.  
  4.       
  5.     NSDictionary *defaults = @{kScreenAutoLock: @NO,  
  6.                                kSensitivityValue: @5};  
  7.     [[NSUserDefaults standardUserDefaults] registerDefaults:defaults];  
  8.     return YES;  
  9. }  

通過一個dictionary來進行設置。這裏的kScreenAutoLock是macro定義的key,就是identifier

2)在獲取數據

[plain] view plaincopy
  1. NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];  
  2.   
  3. value = [defaults floatForKey:kSensitivityValue];  
  4. switch  = [defaults boolForKey:kScreenAutoLock];  

3)更改數據

[plain] view plaincopy
  1. NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];  
  2.   
  3. [defaults setFloat:5.0f forKey:kSensitivityValue];  
  4. [defaults synchronize];  

記住要使用synchronize來實現數據的存儲。


4)補充

單單使用上面的方法還不夠,存在的問題就是如果我們在設置中進行設置更改,那麼這是如果應用已啓動,打開應用後數據因爲沒有同步,還是設置前的數據。因此,在程序EnterForeground時候,應用應該進行數據的同步。

在使用中,就是通過notification,在EnterForeground時候同步更改的數據

代碼:

[plain] view plaincopy
  1. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillEnterForeground:) name:UIApplicationWillEnterForegroundNotification object:nil];  

[plain] view plaincopy
  1. - (void)applicationWillEnterForeground:(NSNotification *)notification  
  2. {  
  3.     [[NSUserDefaults standardUserDefaults] synchronize];  
  4.     [self refreshSettings]; // 更新設置顯示  
  5. }  

關於settings的內容就介紹到這。
發佈了59 篇原創文章 · 獲贊 48 · 訪問量 50萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章