2015-12-21 8 views
5

मैं पूरी तरह से tvos के लिए नया हूँ और मैं एक UISearchController दृश्य जहां, मेरे SearchResultsViewController में, मैं दो UICollectionViews है लागू करने के लिए कोशिश कर रहा हूँ अन्य के ऊपर एक दिखाया गया है: enter image description hereटीवीओएस में फोकस बदलते समय UISearchController में कीबोर्ड को कैसे खारिज करें?

समस्या यह है कि जब उपयोगकर्ता नीचे स्वाइप है UICollectionView में आइटम्स में से किसी एक को चुनने के लिए, कीबोर्ड खारिज नहीं होता है। यहां तक ​​कि कीबोर्ड का चयन करने के लिए बैक अप भी पूरी तरह से स्क्रॉल नहीं होता है और यह देखना असंभव है कि आप क्या टाइप कर रहे हैं। परिणामस्वरूप दृश्य यह है: enter image description here

आदर्श रूप से, जब मैं इंटरफ़ेस में किसी अन्य चीज़ पर ध्यान केंद्रित करने के लिए नीचे स्वाइप करता हूं तो मैं कीबोर्ड को खारिज करना चाहता हूं। मैंने ऐप्पल के tvos UIKit Catalog को देखा और उनका उदाहरण एक यूआईएसearchController दिखाता है जो फोकस बदलते समय कीबोर्ड को खारिज कर देता है, लेकिन मुझे नहीं लगता कि वे कुछ भी अलग कर रहे हैं।

यहाँ कोड मैं सेटअप करने के लिए मेरी UISearchController उपयोग कर रहा हूँ जब उपयोगकर्ता एक बटन पर क्लिक करता है:

@IBAction func onSearchButton(sender: AnyObject) { 
    guard let resultsController = storyboard?.instantiateViewControllerWithIdentifier(SearchResultsViewController.storyboardID) as? SearchResultsViewController else { fatalError("Unable to instantiate a SearchResultsViewController.") } 

    // Create and configure a `UISearchController`. 
    let searchController = UISearchController(searchResultsController: resultsController) 
    searchController.searchResultsUpdater = resultsController 
    searchController.hidesNavigationBarDuringPresentation = false 

    let searchPlaceholderText = NSLocalizedString("Search for a Show or Movie", comment: "") 
    searchController.searchBar.placeholder = searchPlaceholderText 

    // Present the search controller from the root view controller. 
    guard let rootViewController = view.window?.rootViewController else { fatalError("Unable to get root view controller.") } 
    rootViewController.presentViewController(searchController, animated: true, completion: nil) 
} 

उत्तर

4

काफी परीक्षण और त्रुटि का एक सा के बाद, मैं समाधान यह पता लगाने में सक्षम था।

कीबोर्ड अपने आप ही खारिज करेगा जब तक: 1) आइटम उपयोगकर्ता पर केंद्रित एक scrollview 2) के अंदर है scrollview सामग्री आकार कम से कम 1px द्वारा स्क्रीन ऊंचाई से बड़ा है (1081px)।

+0

मैं इस मुद्दे से जूझ रहा हूं, स्क्रॉलव्यू की सामग्री ऊंचाई को बदलने से यह मेरे लिए ठीक नहीं हुआ। आपने अपने व्यू कंट्रोलर को कैसे बनाया? –

+0

@AaronStephenson मुझे भी एक ही समस्या का सामना करना पड़ रहा है। क्या आपको समस्या का कोई समाधान मिला? –

3

बहुत सारे परीक्षण और त्रुटि के बाद, अंततः मुझे पता चला। कारण यह है कि आपके पास नेस्टेड स्क्रॉल व्यू खोज में परिणाम नियंत्रक हैं।

"स्क्रॉल व्यूज़" पाठ्यक्रम में यूआईसीओलेक्शन व्यू, यूआईटीबल व्यू, और यूआईएसक्रोल व्यू शामिल है।

मेरी जांच के अनुसार, UISearchController निम्नानुसार व्यवहार करता है।

  1. पहला दृश्य जो searchResultsController में ध्यान केंद्रित हो जाता है आंतरिक scrollview (जो क्षैतिज UICollectionView है, आपके मामले में) की subview है, तो आप कुंजीपटल छिपा अपेक्षा के अनुरूप नहीं मिलेगा।

  2. दिलचस्प बात यह है कि यदि पहली बार खोज में केंद्रित हो जाता है, तो रीयलट्स कंट्रोलर बाहरी स्क्रॉल व्यू का सबव्यूव्यू है, तो आपको अपेक्षित (!) की तरह पूरी तरह से एनिमेटेड कीबोर्ड मिलेगा।

मुझे लगता है कि यह UIKit की बग की तरह है।

0

मेरे पास बिल्कुल वही लेआउट था और अब तक इसे प्राप्त करने में सक्षम नहीं था। मेरा मानना ​​है कि आप तालिका दृश्य में झूठी वापसी करते हैं (तालिका दृश्य: UITableView, canFocusRowAtIndexPath IndexPath: NSIndexPath) -> बूल ताकि संग्रह दृश्य में प्रत्येक कक्ष उचित फोकस व्यवहार के साथ क्षैतिज रूप से स्क्रॉल कर सके। मुझे लगता है कि यह वास्तव में मुद्दों का कारण बन रहा है। यदि आप टेबलव्यू में पहला सेल फोकस करते हैं तो समस्या दूर हो जाती है लेकिन निश्चित रूप से फोकस व्यवहार वांछित नहीं है। मैंने अभी पाया कि आज बाहर और यह पता लगाने के लिए कल और अधिक प्रयास करेंगे कि मैं इसके बारे में क्या कर सकता हूं। मुझे लगता है कि मुझे एक नए डिज़ाइन की आवश्यकता होगी जो मुझे एक एकल संग्रह या तालिकादृश्य का उपयोग करने की अनुमति दे, जिसमें इसके कक्ष परिणाम नियंत्रक में केंद्रित हो। उम्मीद है कि यह टीवीओएस 10 में आसानी से प्राप्त किया जा सकता है।

0

समाधान के आसपास कार्य: इंडेक्सपैथ पर एक डमी सेल जोड़ें।पंक्ति == 0 ऊंचाई के साथ 1 पिक्सेल के रूप में और उस पर ध्यान केंद्रित करें।

संबंधित मुद्दे