从另一个应用程序打开“设置”应用程序


180

好的,我知道对此有很多疑问,但是它们都是很多年前的。

所以。我知道这是可能的,因为Map应用程序可以做到。

在“地图”应用程序中,如果我关闭了该应用程序的本地化,它将向我发送一条消息,如果按“确定”,则“设置应用程序”将打开。我的问题是,这怎么可能?如何从自己的应用程序打开“设置应用程序”?

基本上,我需要做同样的事情,如果用户关闭了我的应用程序的位置,那么我将向他显示一条消息,提示将打开“设置应用程序”



1
您可以在iOS8中以编程方式打开设置应用(但在较低版本的iOS中无法打开)。答案中的以下代码。
卡兰·杜阿

Answers:


289

正如提到卡兰杜阿这是现在可以在iOS8上的使用UIApplicationOpenSettingsURLString苹果的文档

例:

斯威夫特4.2

UIApplication.shared.open(URL(string: UIApplication.openSettingsURLString)!)

在Swift 3中

UIApplication.shared.open(URL(string:UIApplicationOpenSettingsURLString)!)

在Swift 2中:

UIApplication.sharedApplication().openURL(NSURL(string:UIApplicationOpenSettingsURLString)!)

在Objective-C中

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];

在iOS 8之前:

你不能。正如您所说,此问题已被讨论过很多次了,弹出的窗口要求您打开定位服务是由Apple提供的,而不是由App本身提供的。这就是为什么它能够打开设置应用程序的原因。

以下是一些相关的问题和文章:

是否可以使用openURL打开设置应用程序?

以编程方式打开设置应用(iPhone)

用户按下按钮时如何打开“设置”应用程序?

iPhone:从应用程序打开应用程序首选项面板

通过单击应用程序首选项中的条目来打开UIPickerView-如何?

打开设置应用程序?

iOS:您所做的设置有误


如果您需要更权威的答案,则可以尝试在Apple开发人员论坛< developer.apple.com/devforums >上提问,或在< developer.apple.com/bugreporter >上提交错误-如果它是已知问题,它应该回来如“行为正确”或原始错误的副本。
Vincent Gable


2
现在可以在iOS 8中使用[NSURL URLWithString:UIApplicationOpenSettingsURLString]
LightningStryk

1
快速3-UIApplication.shared.openURL(URL(string:UIApplicationOpenSettingsURLString)!)
GMHSJ

1
谨慎使用此方法。我使用了它,几个月后,我的应用程序被Apple的以下消息拒绝了:您的应用程序使用了“ prefs:root =“非公共URL方案,这是一个私有实体。在App Store上不允许使用非公共API,因为如果这些API发生更改,可能会导致不良的用户体验。在以后提交此应用程序时继续使用或隐藏非公共API可能会导致您的Apple Developer帐户终止,并从App Store中删除所有关联的应用程序。
尼克·基尔斯滕

133

来自@Yatheeshaless答案

您可以通过编程方式在iOS8中打开设置应用,但不能在iOS的早期版本中打开。

迅速:

   UIApplication.sharedApplication().openURL(NSURL(string:UIApplicationOpenSettingsURLString)!)

斯威夫特4:

if let url = NSURL(string: UIApplicationOpenSettingsURLString) as URL? {
    UIApplication.shared.openURL(url)
}

Swift 4.2(测试版):

if let url = NSURL(string: UIApplication.openSettingsURLString) as URL? {
    UIApplication.shared.open(url, options: [:], completionHandler: nil)
}

目标C:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];

23
这似乎会打开“设置”应用程序的应用程序部分。用户必须点击几次Back才能看到“设置”主屏幕。
wjl 2014年

1
小修正[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
。.– Paito

10
@Paito上面这行内容指向应用程序的私人设置。有什么方法可以直接转到设备设置的“ 隐私”部分?如果您知道,请发表评论。这种重定向是可行的,因为我在maps应用中发现了重定向,该重定向直接指向“隐私”部分的位置设置。
Pavan Kotesh 2014年

1
小Swift修正:UIApplication.sharedApplication()。openURL(NSURL(string:UIApplicationOpenSettingsURLString)!)
vbezhenar 2014年

1
@ PavanKotesh-是的,但是应用程序设置将具有您需要的权限,在我的情况下,我需要访问联系人,该联系人确实会显示在具有上述代码的应用程序设置中。
Tejas K

58

是!!您可以启动设备设置屏幕,我已经在iOS 9.2上进行了测试

步骤1.我们需要添加URL方案

转到项目设置->信息-> URL类型->添加新的URL方案

在此处输入图片说明

步骤2.以编程方式启动设置感谢@davidcann

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs://"]];

同样,我们也可以通过使用适当的名称来启动子屏幕,例如音乐,位置等。

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=MUSIC"]];

在此查看此全名列表由Henri Normak共享


更新:

根据评论,每个人都想知道更改我的申请提交状态后会发生什么?

所以 YES!! I got successful update submission and application is available on store without any complain.

只是为了确认一下,我今天早上刚刚下载并禁用了定位服务,然后启动了该应用,该应用要求我提供定位许可,然后我的警报弹出窗口将我发送到设置->定位服务页面->启用->而已!!

![注意:您的应用可能会被拒绝...即使您的应用程序被批准,如果您使用此方法,也可以在以后的版本中将其拒绝...] 4


谢谢,我也可以在iOS 6和7上使用。您是否尝试过通过Apple的审核过程?
2016年

1
@Flo我会让你知道,因为目前我已经推动Beta测试。
swiftBoy

1
iOS 9.3版。像魅力一样工作。我什至在设置应用程序中看到“返回[我的应用程序名称]”。当然,这是受支持的,因为我看到很多其他应用程序都可以执行这种操作!
EricWasTaken

13
在iOS 10上,新网址不是“ prefs:root = ....”,而是“ App-Prefs:root = ...”。
Drico '17

1
您的应用可能会被拒绝...即使您的应用被批准,如果您使用此方法,也可能会在以后的版本中拒绝...
Mihir Mehta

18

您可以在iOS 5.0和更高版本上使用它:不再起作用。

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs://"]];

3
@MarkGranoff不,它在技术上似乎没有记录,但它不像普通的未记录API那样糟糕,因为它只是一个URL方案。您可以先使用canOpenURL:进行检查。另外,这里还有一个主题:devforums.apple.com/message/543818
davidcann 2011年

3
根据本文,您可以进入设置的不同区域。例如,此URL将带您进入蓝牙设置prefs:root=General&path=Bluetooth
progrmr 2011年

1
我因为打开URL:@“ prefs:root = Brightness”而拒绝了使用私有API的应用程序。通常,无证件是私密的。
纪尧姆

4
苹果已经声明这不是公共API,并且不再受支持。有一个关于此问题的错误归档,编号11253669。–
唐·威尔逊

2
我刚刚看到这在Strava应用程序中有效。关闭蓝牙,然后在应用程序中将其打开。然后,它要求进入设置应用程序,并直接转到蓝牙设置。这是针对iOS5.1。有没有办法找出他们正在使用什么方案?
蚂蚁

14

iOS 10更新

苹果更改了在主线程上打开异步的方法。但是,从现在开始,只能在本机设置中打开应用程序设置。

[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];

iOS 9更新

现在可以直接进入子设置菜单。但是,必须创建URL方案。可以使用两种方法来完成:

  1. XCode-您将在Target,Info,URL Scheme中找到它。然后,只需键入prefs。
  2. 直接添加到* -Info.plist。添加以下内容: <key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleTypeRole</key> <string>Editor</string> <key>CFBundleURLSchemes</key> <array> <string>prefs</string> </array> </dict> </array>

然后是代码:

迅速

UIApplication.sharedApplication().openURL(NSURL(string:"prefs:root=General&path=Keyboard")!)

目标c

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=General&path=Keyboard"]];


1
我尝试了iOS 10.x解决方案,但该解决方案对我不起作用-没有任何反应。
马克·彼得斯

@MarkPeters,您找到方法了吗?这可能会很有帮助。谢谢。
Roohul Poolak

不,我没有。我仍然不知道这是iOS的错误还是Apple刚刚删除了该功能。
马克·彼得斯

我认为,它们仍可与扩展一起使用。防爆应用程序Magic Launcher在Appstore中。
三叉戟

4

在Swift 3 / iOS 10+中,现在看起来像

if let url = URL(string: "App-Prefs:root=LOCATION_SERVICES") {
    UIApplication.shared.open(url, completionHandler: .none)
}

如何进入通知屏幕?因为如果让url = URL(string:“ App-Prefs:root = NOTIFICATIONS_ID&path = io.artup.artup”){如果#available(iOS 10.0,*){UIApplication.shared.open(url,completeHandler:.none)} },但是我去了iPhone 6中的通知,而不是iPhone 7 plus?
user3804063

3
这会使您的应用程序被拒绝。他们将其置于私有API之下。
Bersaelor

我已经拒绝了我的应用,使用的是“ App-Prefs:root”
Malder

1
只需强调此处提到的其他内容,不要使用此方法,它会使您的应用程序被拒绝。重复提交此类应用程序将关闭您的开发人员帐户。
CodeBrew

4

斯威夫特3:

guard let url = URL(string: UIApplicationOpenSettingsURLString) else {return}
if #available(iOS 10.0, *) {
  UIApplication.shared.open(url, options: [:], completionHandler: nil)
} else {
  // Fallback on earlier versions
  UIApplication.shared.openURL(url)
}

3

UIApplicationOpenSettingsURLString仅在您之前允许任何许可的情况下,此功能才起作用。例如位置,照片,联系人,推送通知访问。因此,如果您没有来自用户的此类许可,则:

如果是iOS 10或更高版本

它将打开设置,然后将其崩溃。原因是,您的应用程序设置中没有任何内容。

以下代码将在iOS设置中打开您的应用程序设置。

NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
    [[UIApplication sharedApplication] openURL:url];
}

由于设备不可用,我无法在iOS <10上进行检查。

另外,我可以从某些要点中找到以下代码,它在iOS 10上也能正常工作。但是我不确定这是否会得到苹果审查小组的认可。

https://gist.github.com/johnny77221/bcaa5384a242b64bfd0b8a715f48e69f


3

在Swift 3中,我所需要做的就是这里(例如,重定向到我的应用程序通知):

if let url = URL(string: "App-Prefs:root=NOTIFICATIONS_ID&path=your app bundleID") {
    if #available(iOS 10.0, *) {
        UIApplication.shared.open(url, completionHandler: .none)
    } else {
        // Fallback on earlier versions
    }
}

资料来源:phynet gist

这仅在设置处于后台时才与我一起使用。它会将您重定向到您的应用通知设置,但如果设置不是在后台运行,则通常只会将您重定向到通知设置。


3

似乎您可以使用prefs:<area>URL打开设置并转到特定区域。Apple可能会更改这些内容并破坏您的应用程序,因此请始终检查是否可以先打开它们。

从这篇文章中,他们列出了其中一些适用于iOS 13.1的内容:

设定网址

iCloud的

  • iCloud: prefs:root=CASTLE
  • iCloud备份: prefs:root=CASTLE&path=BACKUP

无线广播

  • 无线上网: prefs:root=WIFI
  • 蓝牙: prefs:root=Bluetooth
  • 蜂窝电话: prefs:root=MOBILE_DATA_SETTINGS_ID

个人热点

  • 个人热点: prefs:root=INTERNET_TETHERING
  • 个人热点⇾家庭共享: prefs:root=INTERNET_TETHERING&path=Family%20Sharing
  • 个人热点⇾Wi-Fi密码: prefs:root=INTERNET_TETHERING&path=Wi-Fi%20Password

虚拟专用网

  • VPN: prefs:root=General&path=VPN

通知事项

  • 通知: prefs:root=NOTIFICATIONS_ID
  • 通知⇾Siri建议: prefs:root=NOTIFICATIONS_ID&path=Siri%20Suggestions

声音

  • 声音: prefs:root=Sounds
  • 铃声: prefs:root=Sounds&path=Ringtone

请勿打扰

  • 请勿打扰: prefs:root=DO_NOT_DISTURB
  • 请勿打扰⇾允许来自以下位置的呼叫: prefs:root=DO_NOT_DISTURB&path=Allow%20Calls%20From

检测时间

  • 检测时间: prefs:root=SCREEN_TIME
  • 屏幕时间⇾停机时间: prefs:root=SCREEN_TIME&path=DOWNTIME
  • 屏幕时间⇾应用限制: prefs:root=SCREEN_TIME&path=APP_LIMITS
  • 屏幕时间⇾始终允许: prefs:root=SCREEN_TIME&path=ALWAYS_ALLOWED

一般

  • 一般: prefs:root=General
  • 一般⇾关于: prefs:root=General&path=About
  • ⇾软件更新: prefs:root=General&path=SOFTWARE_UPDATE_LINK
  • 一般⇾CarPlay: prefs:root=General&path=CARPLAY
  • 常规⇾后台应用程序刷新: prefs:root=General&path=AUTO_CONTENT_DOWNLOAD
  • 常规⇾多任务处理(仅限iPad): prefs:root=General&path=MULTITASKING
  • 一般⇾日期和时间: prefs:root=General&path=DATE_AND_TIME
  • 常规⇾键盘: prefs:root=General&path=Keyboard
  • 常规⇾键盘⇾键盘: prefs:root=General&path=Keyboard/KEYBOARDS
  • 常规⇾键盘⇾硬件键盘: prefs:root=General&path=Keyboard/Hardware%20Keyboard
  • 常规⇾键盘⇾文本替换: prefs:root=General&path=Keyboard/USER_DICTIONARY
  • 常规⇾键盘⇾单手键盘: prefs:root=General&path=Keyboard/ReachableKeyboard
  • 一般⇾语言和地区: prefs:root=General&path=INTERNATIONAL
  • ⇾字典: prefs:root=General&path=DICTIONARY
  • 一般⇾个人资料: prefs:root=General&path=ManagedConfigurationList
  • 常规⇾重置: prefs:root=General&path=Reset

控制中心

  • 控制中心: prefs:root=ControlCenter
  • 控制中心⇾自定义控件: prefs:root=ControlCenter&path=CUSTOMIZE_CONTROLS

显示

  • 显示: prefs:root=DISPLAY
  • 显示⇾自动锁定: prefs:root=DISPLAY&path=AUTOLOCK
  • 显示⇾文字大小: prefs:root=DISPLAY&path=TEXT_SIZE

辅助功能

  • 辅助功能: prefs:root=ACCESSIBILITY

墙纸

  • 墙纸: prefs:root=Wallpaper

西里

  • Siri: prefs:root=SIRI

苹果铅笔

  • Apple Pencil(仅限iPad): prefs:root=Pencil

人脸编号

  • 人脸ID: prefs:root=PASSCODE

紧急求救

  • 紧急SOS: prefs:root=EMERGENCY_SOS

电池

  • 电池: prefs:root=BATTERY_USAGE
  • 电池⇾电池运行状况(仅iPhone): prefs:root=BATTERY_USAGE&path=BATTERY_HEALTH

隐私

  • 隐私: prefs:root=Privacy
  • 隐私⇾定位服务: prefs:root=Privacy&path=LOCATION
  • 隐私⇾联系人: prefs:root=Privacy&path=CONTACTS
  • 隐私⇾日历: prefs:root=Privacy&path=CALENDARS
  • 隐私⇾提醒: prefs:root=Privacy&path=REMINDERS
  • 隐私⇾照片: prefs:root=Privacy&path=PHOTOS
  • 隐私权⇾麦克风: prefs:root=Privacy&path=MICROPHONE
  • 隐私⇾语音识别: prefs:root=Privacy&path=SPEECH_RECOGNITION
  • 隐私权⇾摄像头: prefs:root=Privacy&path=CAMERA
  • 隐私⇾动作: prefs:root=Privacy&path=MOTION\

应用商店

  • 应用商店: prefs:root=STORE
  • App Store⇾应用下载: prefs:root=STORE&path=App%20Downloads
  • App Store⇾视频自动播放: prefs:root=STORE&path=Video%20Autoplay

钱包

  • 钱包: prefs:root=PASSBOOK

密码和帐号

  • 密码和帐号: prefs:root=ACCOUNTS_AND_PASSWORDS
  • 密码和帐户⇾获取新数据: prefs:root=ACCOUNTS_AND_PASSWORDS&path=FETCH_NEW_DATA
  • 密码和帐户⇾添加帐户: prefs:root=ACCOUNTS_AND_PASSWORDS&path=ADD_ACCOUNT

邮件

  • 邮件: prefs:root=MAIL
  • 邮件⇾预览: prefs:root=MAIL&path=Preview
  • 邮件⇾滑动选项: prefs:root=MAIL&path=Swipe%20Options
  • 邮件⇾通知: prefs:root=MAIL&path=NOTIFICATIONS
  • 邮件⇾已阻止: prefs:root=MAIL&path=Blocked
  • 邮件⇾线程静音操作: prefs:root=MAIL&path=Muted%20Thread%20Action
  • 邮件⇾阻止的发件人选项: prefs:root=MAIL&path=Blocked%20Sender%20Options
  • 邮件⇾标记地址: prefs:root=MAIL&path=Mark%20Addresses
  • 邮件⇾增加报价等级: prefs:root=MAIL&path=Increase%20Quote%20Level
  • 邮件⇾包括带有回复的附件: prefs:root=MAIL&path=Include%20Attachments%20with%20Replies
  • 邮件⇾签名: prefs:root=MAIL&path=Signature
  • 邮件⇾默认帐户: prefs:root=MAIL&path=Default%20Account

联络人

  • 联系人: prefs:root=CONTACTS

日历

  • 日历: prefs:root=CALENDAR
  • 日历⇾备用日历: prefs:root=CALENDAR&path=Alternate%20Calendars
  • 日历⇾同步: prefs:root=CALENDAR&path=Sync
  • 日历⇾默认警报时间: prefs:root=CALENDAR&path=Default%20Alert%20Times
  • 日历⇾默认日历: prefs:root=CALENDAR&path=Default%20Calendar

笔记

  • 笔记: prefs:root=NOTES
  • 注释⇾默认帐户: prefs:root=NOTES&path=Default%20Account
  • 注意⇾密码: prefs:root=NOTES&path=Password
  • 注释⇾注释排序依据: prefs:root=NOTES&path=Sort%20Notes%20By
  • 便笺⇾新便笺开始于: prefs:root=NOTES&path=New%20Notes%20Start%20With
  • 注释⇾对已检查项目进行排序: prefs:root=NOTES&path=Sort%20Checked%20Items
  • 注释⇾线和网格: prefs:root=NOTES&path=Lines%20%26%20Grids
  • 注释from从锁定屏幕访问注释: prefs:root=NOTES&path=Access%20Notes%20from%20Lock%20Screen

提醒事项

  • 温馨提示: prefs:root=REMINDERS
  • 提醒⇾默认列表: prefs:root=REMINDERS&path=DEFAULT_LIST

语音备忘录

  • 语音备忘: prefs:root=VOICE_MEMOS

电话

  • 电话: prefs:root=Phone

留言内容

  • 讯息: prefs:root=MESSAGES

视频对话

  • 视频对话: prefs:root=FACETIME

地图

  • 地图: prefs:root=MAPS
  • 地图⇾驾驶和导航: prefs:root=MAPS&path=Driving%20%26%20Navigation
  • 地图⇾运输: prefs:root=MAPS&path=Transit

罗盘

  • 罗盘: prefs:root=COMPASS

测量

  • 测量: prefs:root=MEASURE

苹果浏览器

  • 苹果浏览器: prefs:root=SAFARI
  • Safari⇾内容阻止程序: prefs:root=SAFARI&path=Content%20Blockers
  • Safari⇾下载: prefs:root=SAFARI&path=DOWNLOADS
  • Safari⇾关闭标签: prefs:root=SAFARI&path=Close%20Tabs
  • Safari⇾清除历史记录和数据: prefs:root=SAFARI&path=CLEAR_HISTORY_AND_DATA
  • Safari⇾页面缩放: prefs:root=SAFARI&path=Page%20Zoom
  • Safari⇾请求桌面网站: prefs:root=SAFARI&path=Request%20Desktop%20Website
  • Safari⇾Reader: prefs:root=SAFARI&path=Reader
  • Safari⇾相机: prefs:root=SAFARI&path=Camera
  • Safari⇾麦克风: prefs:root=SAFARI&path=Microphone
  • Safari⇾位置: prefs:root=SAFARI&path=Location
  • Safari⇾高级: prefs:root=SAFARI&path=ADVANCED

新闻

  • 新闻: prefs:root=NEWS

健康

  • 健康: prefs:root=HEALTH

捷径

  • 捷径: prefs:root=SHORTCUTS

音乐

  • 音乐: prefs:root=MUSIC
  • 音乐⇾蜂窝数据: prefs:root=MUSIC&path=com.apple.Music:CellularData
  • 音乐⇾优化存储: prefs:root=MUSIC&path=com.apple.Music:OptimizeStorage
  • 音乐⇾EQ: prefs:root=MUSIC&path=com.apple.Music:EQ
  • 音乐⇾音量限制: prefs:root=MUSIC&path=com.apple.Music:VolumeLimit

电视

  • 设置⇾电视: prefs:root=TVAPP

相片

  • 相片: prefs:root=Photos

相机

  • 相机: prefs:root=CAMERA
  • 相机⇾录制视频: prefs:root=CAMERA&path=Record%20Video
  • 相机⇾录制慢动作: prefs:root=CAMERA&path=Record%20Slo-mo

图书

  • 图书: prefs:root=IBOOKS

游戏中心

  • 游戏中心: prefs:root=GAMECENTER

1

您可以使用以下代码。

[[UIApplication sharedApplication]openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];

1

SWIFT 4.0

在iOS 10.0中不建议使用'openURL':请改用openURL:options:completionHandler:

UIApplication.shared.open(URL.init(string: UIApplicationOpenSettingsURLString)! , options: [:], completionHandler: nil)

1

斯威夫特4

我更喜欢以更安全的方式打开环境,

if let settingUrl = URL(string:UIApplicationOpenSettingsURLString) {

    UIApplication.shared.open(settingUrl)
}
else {
    print("Setting URL invalid")
}

0

Swift您可以使用以下功能通过蓝牙页面打开设置应用程序

func openSettingsApp(){
    if let settings = NSURL(string: "prefs:root=Bluetooth") {
        UIApplication.sharedApplication().openURL(settings)
    }
}

同样,这不会打开应用程序的设置。这会打开与蓝牙的深层链接的蓝牙设置应用程序。


0

经过iOS 10测试。

NSArray* urlStrings = @[@"prefs:root=WIFI", @"App-Prefs:root=WIFI"];
for(NSString* urlString in urlStrings){
NSURL* url = [NSURL URLWithString:urlString];
if([[UIApplication sharedApplication] canOpenURL:url]){
    [[UIApplication sharedApplication] openURL:url];
    break;
}
}

快乐编码:)


3
这会使您的应用程序被拒绝。只是发生在我身上。
Bersaelor

是的,但是此行代码将直接将您带到所需的位置
Praveen Sharma

1
是的,它将带您到达那里。我并不是说这行不通,而是要指出它会使您在应用审核期间被拒绝。根据审核小组告诉我们的内容,“ prefs:root”是一个私有URL方案。(您可能很幸运,他们一阵子都没注意到,我们
暂时启用

感谢您提供的信息,我将尝试其他尝试,但是现在我陷入了VPN连接问题,为此找到了解决方案。
Praveen Sharma

0

要添加到已接受的答案中,请执行以下操作:(来自Apple开发者文档)“当您打开从该字符串构建的URL(openSettingsURLString)时,系统将启动“设置”应用程序并显示该应用程序的自定义设置(如果有)。因此,如果要打开应用程序的设置,请创建自己的Settings.bundle。


-1

将此添加到您的班级,

 public class func showSettingsAlert(title:String,message:String,onVC viewController:UIViewController,onCancel:(()->())?){
            YourClass.show2ButtonsAlert(onVC: viewController, title: title, message: message, button1Title: "Settings", button2Title: "Cancel", onButton1Click: {
                if let settingsURL = NSURL(string: UIApplicationOpenSettingsURLString){
                    UIApplication.sharedApplication().openURL(settingsURL)
                }
                }, onButton2Click: {
                    onCancel?()
            })
        }

 public class func show2ButtonsAlert(onVC viewController:UIViewController,title:String,message:String,button1Title:String,button2Title:String,onButton1Click:(()->())?,onButton2Click:(()->())?){
            dispatch_async(dispatch_get_main_queue()) {
                let alert : UIAlertController = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert)

                alert.addAction(UIAlertAction(title: button1Title, style:.Default, handler: { (action:UIAlertAction) in
                    onButton1Click?()
                }))

                alert.addAction(UIAlertAction(title: button2Title, style:.Default, handler: { (action:UIAlertAction) in
                    onButton2Click?()
                }))

                viewController.presentViewController(alert, animated: true, completion: nil)
            }
        }

这样打

YourClass.showSettingsAlert("App would like to access camera", message: "App would like to access camera desc", onVC: fromViewController, onCancel: {
  print("canceled")
})
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.