2016-09-23 94 views
4

我最近升級到Xcode 8並將我的代碼轉換爲Swift 3.我製作的自定義鍵盤(擴展)在iOS 9之前工作得很好,但我面對一對夫婦在iOS的問題10.在我的應用程序中單擊按鈕時打開手機設置

  1. 自定義鍵盤的容器應用程序包含一個按鈕,將用戶定向到鍵盤設置添加鍵盤

問題:單擊此按鈕不工作iOS 10即用戶沒有定向到設置。我已經在我的項目中配置的URL方案,並已嘗試下面的代碼:

@IBAction func btnGetStarted(_ sender: AnyObject) { 

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

也試過:

@IBAction func btnGetStarted(_ sender: AnyObject) { 

if let settingsURL = URL(string:"prefs:root=General&path=Keyboard/KEYBOARDS") { 
UIApplication.shared.openURL(settingsURL) 
} 
} 
  • 自定義鍵盤還包含的表情符號圖像。用戶需要在設置中啓用「允許訪問」才能使用表情符號圖像。如果用戶未啓用「允許訪問」,則他不能使用表情符號圖像。如果「允許訪問」未啓用,並且用戶嘗試點擊表情符號,則會彈出一個通知,告訴用戶轉到設置並啓用「允許訪問」。
  • 問題:當應用程序在iOS中運行10

    代碼土司的這種敬酒不彈出:

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath){ 
    
        let pbWrapped: UIPasteboard? = UIPasteboard.general 
    
        if let pb = pbWrapped { 
         if currentKeyboard == XXXXXX.emoji { 
          if let data = UIImagePNGRepresentation(dataEmoji[(indexPath as NSIndexPath).row]) { 
           pb.setData(data, forPasteboardType: "public.png") 
    
            self.makeToast(pasteMessage, duration: 3.0, position: .center) 
          } 
         } 
    
        } else { 
         var style = ToastStyle() 
         style.messageColor = UIColor.red 
         style.messageAlignment = .center 
         //style.backgroundColor = UIColor.whiteColor() 
    
         self.makeToast("To really enjoy the keyboard, please Allow Full Access in the settings application.", duration: 8.0, position: .center, title: nil, image: UIImage(named: "toast.png"), style: style, completion: nil) 
        } 
    } 
    

    我做了計算器檢查出一些解決方案,但沒有他們爲我工作,正如我之前說過的,我的應用程序在除iOS 10以外的所有版本上工作得非常好。 請有人可以幫我嗎?

    +0

    http://stackoverflow.com/questions/28152526/how-do-i-open-手機設置,當按鈕被點擊時 - ios – Rock

    +0

    @Rock正如我上面寫的,我已經試過了,我的工作 – PersianBlue

    +0

    @PersianBlue:你有答案,我也面臨同樣的問題。 – RJ168

    回答

    3

    @persianBlue:這是在Xcode8 + iOS10上工作。

    UIApplication.shared.openURL(URL(string:UIApplicationOpenSettingsURLString)!) 
    
    +1

    我已經試過了。這將應用程序指向手機設置應用程序,但它只有一個白色屏幕,並且在設置選項顯示前應用程序關閉 – PersianBlue

    +0

    看起來有些人不會受到崩潰的影響。從更新到iOS 10的那一天起,我面臨着同樣的崩潰。即使更新到iOS 10.0.2也無法解決問題。 – Mesbah

    +0

    僅供參考,崩潰日誌在這裏:http://pastebin.com/L9zQ7kmZ。希望有人能夠提取實際發生的事情。 – Mesbah

    1

    UIApplicationOpenSettingsURLString提供了一個鏈接到應用程序的設置。在iOS10之前,如果應用程序缺少settings.Bundle,它將鏈接到設置主頁。日誌會顯示:

    _BSMachError: (os/kern) invalid capability (20) _BSMachError: (os/kern) invalid name (15)

    如果你的目的是要鏈接到應用程序的設置,你只需添加一個設置捆綁。 Apple Documentation

    我還沒有找到鏈接到手機設置主頁的方法。

    +0

    您是否找到了鏈接手機設置的方法? – richc

    0

    如果您看到像@PersianBlue一樣的白色屏幕,您的應用可能缺少自定義設置。 下面介紹一下文件對此有什麼看法UIApplicationOpenSettingsURLString

    用於創建可傳遞到的OpenURL(_ :)方法的URL。當您打開使用此字符串構建的網址時,系統會啓動 「設置」應用程序,並顯示應用程序的自定義設置(如果有)。

    4

    斯威夫特3 iOS的10

    let settingsUrl = NSURL(string:UIApplicationOpenSettingsURLString) as! URL 
    UIApplication.shared.open(settingsUrl, options: [:], completionHandler: nil) 
    
    +0

    我也試過這個,但它只是將我引導到一個空白屏幕 – PersianBlue

    +0

    它看起來像你忘了在didFinishLaunchingWithOptions請求用戶權限。檢查它 –

    +0

    我在設置中添加了URL類型,如下所示 - http://stackoverflow.com/a/35542855/6077720。那麼在didFinishLaunchingWithOptions中需要什麼用戶權限 – PersianBlue

    0

    我寫了下面的功能,它爲我工作。我幫助它會幫助你們。

    func openLocationSettings(){ let scheme:String = UIApplicationOpenSettingsURLString if let url = URL(string: scheme) { if #available(iOS 10, *) { UIApplication.shared.open(url, options: [:], completionHandler: { (success) in print("Open \(scheme): \(success)") }) } else { let success = UIApplication.shared.openURL(url) print("Open \(scheme): \(success)") } } }

    1

    這是iOS11沒有可能的了,我們可以打開設置,如:

    if let url = URL(string:UIApplicationOpenSettingsURLString), UIApplication.shared.canOpenURL(url) { 
        //iOS 10 + 
        UIApplication.shared.open(url, options: [:], completionHandler:{ didOpen in 
         print("Opened \(didOpen)") 
        }) 
        //iOS 9 + 
        UIApplication.shared.open(url) 
    } 
    
    相關問題