iOS 開發 初級: 應用設定Setting的實現

來源:互聯網
上載者:User

有很多應用都在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)一般我們需要設定一些初始資料,也就是應用第一次開啟就能將資料進行初始預設設定。

代碼:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{    // Override point for customization after application launch.        NSDictionary *defaults = @{kScreenAutoLock: @NO,                               kSensitivityValue: @5};    [[NSUserDefaults standardUserDefaults] registerDefaults:defaults];    return YES;}

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

2)在擷取資料

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];        value = [defaults floatForKey:kSensitivityValue];    switch  = [defaults boolForKey:kScreenAutoLock];

3)更改資料

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];    [defaults setFloat:5.0f forKey:kSensitivityValue];    [defaults synchronize];

記住要使用synchronize來實現資料的儲存。


4)補充

單單使用上面的方法還不夠,存在的問題就是如果我們在設定中進行設定更改,那麼這是如果應用已啟動,開啟應用後資料因為沒有同步,還是設定前的資料。因此,在程式EnterForeground時候,應用應該進行資料的同步。

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

代碼:

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillEnterForeground:) name:UIApplicationWillEnterForegroundNotification object:nil];

- (void)applicationWillEnterForeground:(NSNotification *)notification{    [[NSUserDefaults standardUserDefaults] synchronize];    [self refreshSettings]; // 更新設定顯示}

關於settings的內容就介紹到這。









相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.