The iphone supports a means of defining your application's settings such that it will automatically create a UI in the Settings app. I want to also allow the user to edit the application settings within the application but it'd be nice to reuse the same UI that is automatically created.
See: Application Settings
Is there a way to have your application display the settings using the same UI that the Settings application does?
No there is not a way to reuse the UI.
There is, however, a way to reuse the data. Settings.app will put the settings in NSUserDefaults under the keys specified in your Settings.bundle plist file. You can alter those values in your app, then switch to Settings.app and see that it will have changed to reflect your new values. This is really nice if you want to allow the user to edit settings in the app (if that's what they're used to) or in Settings.app (if that's what they're used to).
EDIT #1
You may want to look at this thread. There is a library called mySettings that would make building this easier.
EDIT #2
There are a couple libraries available now that do this:
InAppSettings
InAppSettingsKit
Related
I have been reading and exploring around adding settings for custom apps in the iPhone settings page.
And there is a question that is arising in my mind that, can we point an XIB / UIStoryboard-viewController which is designed by us into the root.plist.
This can help in displaying custom design and handling things differently as required.
For example, if custom app uses the passcode protection then we will need to save the passcode into the keychain and that will require additional logic to be written.
Cheers,
Kunjal
You cannot use custom UIViewControllers in the iOS settings page for your app. When using the Settings.bundle the preferences are stored in NSUserDefaults which does not integrate with the keychain. So you will need to include the settings view for the passcode in the app itself.
Is it possible to change the application's settings menu from the program. For example if I have a list of options the user chooses from in the settings menu, is it possible to load those options from a JSON string, rather than specify them when creating the application settings menu?
No the settings will be created with the bundled settings plist file. The only way for you to change them programmatically is by using the NSUSerDefaults while your app is running.
I have created an iOS 4.0 app with a Settings bundle. I am using the InAppSettingsKit (http://www.inappsettingskit.com) which presents the settings in the app. This allows the user to modify those settings directly from within the app, without the need to go to the external iPhone Settings.app. As the settings are accessible from inside the app (and I am doing some custom styling to the in-app settings screen) I would like to stop the Settings bundle from appearing in the iPhone Settings.app. Is this possible?
Any help would be greatly appreciated.
InAppSettingKit allows the use of an internal only settings bundle. Rename Settings.bundle to be this and then the OS wont find it to put it in the Main Settings part
Check out "Some little extras" on the product page
I've seen there is a library called InAppSettingsKit - http://www.inappsettingskit.com/ - which lets your in-app settings mimic your settings within the Settings app.
But is there a way to get this to NOT use the Settings app as well? So it just allows you to change settings within the app. Or is there another library which does this?
InAppSettingKit lets you use a local bundle for the in-app part (see documentation) Try only including this and not including the Settings.bundle
I'm building an iphone app, and I wanna use the iPhone's built in Preferences stuff. It looks like I put options in there, but I'm interested in putting a Reset button in the Prefs. I see that Apple's built-in apps like Safari have buttons in their prefs (Clear History, Clear Cookies, etc). I don't see a way to do this for SDK apps. Help!
Your Settings bundle cannot contain any runnable code, so it's not possible to have buttons like safari (Clear History, Clear Cookies, etc).
Safari is a builtin application provided by Apple, therefore it has access to apis/privileges that normal AppStore applications don't.
You can see the list of possible elements here.
One thing you can do, since you can set your own app's preferences during runtime, is create a "Reset preferences on next run" toggle.
When your app starts up, check for this setting and act accordingly if it is set to "On". Don't forget to reset the toggle as well. ;-)
Here's a Q&A that explains how to do this: How to change the app preference settings through code?