2015-02-17 12 views
13

जब अलर्ट पॉप अप करता है तो कुंजीपटल खारिज कर दिया जाता है। मैंने हर जगह देखा है लेकिन कीबोर्ड को दिखने के लिए समाधान नहीं मिला। जब अलर्ट प्रस्तुत किया जाता है तो टेक्स्टफील्ड स्वचालित रूप से पहले उत्तरदाता को इस्तीफा दे रहा है क्योंकि चेतावनी सामान्य रूप से प्रस्तुत की जाती है। कुंजीपटल को इस चेतावनी के पीछे रखना कैसा है, जिसका मतलब है कि टेक्स्टफील्ड अभी भी संपादन कर रहा है भले ही कोई बातचीत संभव न हो?स्विफ्ट में UIAlertcontroller प्रस्तुत होने पर कीबोर्ड को दबाएं?

उत्तर

21

यह समाधान मेरे लिए काम करता है:

let rootViewController: UIViewController = 
    UIApplication.sharedApplication().windows.lastObject.rootViewController!! 
rootViewController.presentViewController(alert, animated: true, completion: nil) 

@galambalazs द्वारा संपादित: कारण यह काम करता है क्योंकि:

आप वर्तमान उच्चतम खिड़की स्तर के साथ खिड़की हड़पने कर सकते हैं और उस विंडो के अंदर नियंत्रक देखें (इसे शीर्ष देखें नियंत्रक शीर्ष विंडो) में।

UIApplication.sharedApplication().windows
सरणी में खिड़कियों वापस खिड़की स्तर से सामने से आदेश दिया जाता है;
इस प्रकार, सरणी में अंतिम विंडो अन्य सभी ऐप विंडो के शीर्ष पर है।

इसके अलावा आप उस विंडो के टिंटकॉलर को सेट करना चाहेंगे ताकि यह आपके ऐप्स ग्लोबल टिंटकॉलर से मेल खा सके।

UIWindow *topWindow = [UIApplication sharedApplication].windows.lastObject; 
// we inherit the main window's tintColor because topWindow may not have the same 
topWindow.tintColor = [UIApplication sharedApplication].delegate.window.tintColor; 
+1

यह सही लग रहा है इस तरह खिड़की स्थिति पट्टी में है चेतावनी नियंत्रक पेश करने के लिए उपयोग कर रहा है? – ninjudd

+1

दरअसल, मैं गलत था। 'UIAppplication.sharedAplication() में दूसरी विंडो। Windows' एक UITextEffectsWindow है। – ninjudd

+1

अधिक शोध के बाद, मैंने पाया कि UITextEffectsWindow वह है जहां कीबोर्ड दृश्य (या UIViewController inputAccessoryView) स्थित है। तो यह दूसरी विंडो केवल तभी मौजूद होगी जब कीबोर्ड प्रदर्शित किया गया हो। http://www.fantageek.com/1317/uiwindow-in-ios/ – ninjudd

0

स्विफ्ट 3 और iOS11

लिए
if let alertWindow = UIApplication.shared.windows.last, alertWindow.windowLevel == 10000001.0 // If keyboard is open 
    { // Make sure keyboard is open 
    alertWindow.rootViewController?.present(alertController, animated: true, completion: nil) 
    } 
    else 
    { 
    viewController?.present(alertController, animated: true, completion: nil) 
    } 
संबंधित मुद्दे