2015-10-20 28 views
12

मेरे पास एक UICollectionView है जिसमें 12-13 UICollectionViewCells शामिल हैं। मैं आसानी से UICollectionViewCells पर ध्यान केंद्रित कर सकता हूं और सब कुछ काम करता है। UICollectionView के बाहर एक UIButton है। अगर मैं पहले सेल या दूसरे सेल पर हूं और मैं स्वाइप करता हूं तो मैं आसानी से UIButton पर ध्यान केंद्रित कर सकता हूं। जब मैं तीसरे सेल पर हूं तो मैं फोकस को UIButton पर ले जाने में सक्षम नहीं हूं। कुछ पता है कि क्या चल रहा है?UICollectionViewCell को यूआईबटन फोकस में टीवीओएस

enter image description here

उत्तर

14

आप एक UIFocusGuide कि UIButton आप ध्यान केंद्रित करना चाहते शामिल हैं का उपयोग करना चाहिए। UIFocusGuide को संग्रह के रूप में चौड़ा बनाएं और बटन को कवर करने के लिए पर्याप्त लंबा बनाएं। पसंदीदा फोकस बटन देखें।

UIFocusGuide *topButtonFocusGuide = [[UIFocusGuide alloc] init]; 
    topButtonFocusGuide.preferredFocusedView = myButton; 
    [self.view addLayoutGuide:topButtonFocusGuide]; 

    [self.view addConstraints:@[ 
    [topButtonFocusGuide.topAnchor constraintEqualToAnchor:myButton.topAnchor], 
    [topButtonFocusGuide.bottomAnchor constraintEqualToAnchor:myCollectionView.topAnchor], 
    [topButtonFocusGuide.leadingAnchor constraintEqualToAnchor:myCollectionView.leadingAnchor], 
    [topButtonFocusGuide.widthAnchor constraintEqualToAnchor:myCollectionView.widthAnchor], 
    ]]; 
+0

धन्यवाद जेस - यह मुझे पागल कर रहा था। ध्यान दें कि यदि आपको इसका उपयोग करने में कोई समस्या है तो यह हो सकता है क्योंकि आपके एंकर पॉइंट में से एक अन्य दृश्य में एम्बेड किया गया है। मेरे पास एक स्क्रॉल व्यू के अंदर एक संग्रह दृश्य था और संग्रह दृश्य नीचे का उपयोग कर रहा था क्योंकि मेरा शीर्ष एंकर पॉइंट काम नहीं करता था। इसे स्क्रॉल व्यू नीचे बदलकर काम किया। – Reefwing

+0

एक आकर्षण की तरह काम करता है! धन्यवाद। –

+0

हाय जेस, मेरे पास एक और मुद्दा है। अगर मेरे पास बाईं ओर दाईं ओर बटन है और यदि मेरे पास केवल एक पंक्ति संग्रह दृश्य है तो मैं संग्रह दृश्य को ध्यान केंद्रित करने में सक्षम नहीं हो सकता। इसके लिए कोई समाधान? –

2

जेस बोवर्स समाधान लगभग वहाँ है, लेकिन Xcode कहते UIButton रों topAnchor संपत्ति और समाधान जेस द्वारा दिए गए मेरे लिए काम नहीं करता नहीं है।

मेरे लिए, समाधान उसी चौड़ाई के साथ एक विशाल दृश्य बनाना था जैसे UICollectionView इसके शीर्ष पर। तस्वीर देखो।

UIFocusGuide *topButtonFocusGuide = [[UIFocusGuide alloc] init]; 
    topButtonFocusGuide.preferredFocusedView = myButton; 
    [self.view addLayoutGuide:topButtonFocusGuide]; 

    [self.view addConstraints:@[ 
    [topButtonFocusGuide.topAnchor constraintEqualToAnchor:transparentView.topAnchor], 
    [topButtonFocusGuide.bottomAnchor constraintEqualToAnchor:transparentView.bottomAnchor], 
    [topButtonFocusGuide.leadingAnchor constraintEqualToAnchor:transparentView.leadingAnchor], 
    [topButtonFocusGuide.widthAnchor constraintEqualToAnchor:transparentView.widthAnchor], 
    ]]; 
+0

UIButton UIControl का उप-वर्ग है जो UIView का उप-वर्ग है। https://developer.apple.com/library/tvos/documentation/UIKit/Reference/UIButton_Class/ ऐप्पल नमूना भी देखें जो बटन पर शीर्ष एंकर का उपयोग करता है। https://developer.apple.com/library/prerelease/tvos/samplecode/UICatalogFortvOS/Listings/UIKitCatalog_FocusGuidesViewController_swift.html –

+0

ठीक है लेकिन एक्सकोड कहता है कि बटनों का कोई शीर्ष नहीं है और दुर्भाग्य से जेस का समाधान मेरे लिए काम नहीं करता है। – SpaceDog

+0

कुछ और गलत है। मैंने बस अपने बटन के नाम पर टाइप किया, टाइप किया .top और हिट से बचें और स्वतः पूर्ण मुझे शीर्ष एंकर दिखाया। वर्तमान एक्सकोड। इसके अलावा, जेस का समाधान मेरे लिए भी काम नहीं करता है। मैं गाइड के फ्रेम को ब्रेकपॉइंट में देखता हूं और यह सही दिखता है। लेकिन इसका कोई प्रभाव नहीं है। –

0

उपयोग::

ओवरराइड कमजोर वर preferredFocusedView: UIView

enter image description here

कोड इस होगा? { प्राप्त करें { वापसी segmentedControl }}

0

मुद्दों मैं लैंडिंग पृष्ठों के लिए एक UINavigationController का उपयोग कर ढेर पर विस्तार ViewControllers पुश करने के लिए जब एक आइटम का चयन किया गया सामना शामिल किया गया था में से एक।

मैं UIButton के canBecomeFocused ओवरराइड के अंदर एक ब्रेकपाइंट रखा, और इस त्वरित थोड़ा एक्सटेंशन का उपयोग कर बटन पूछा क्यों यह फ़ोकस करने योग्य नहीं है।

extension UIView { 
    func whyNotFucusable() { 
     print(self.perform(Selector(("_whyIsThisViewNotFocusable"))).takeUnretainedValue()) 
    } 
} 

मैं डिबग करने की कोशिश कर निम्न त्रुटि प्राप्त रखा ....

ISSUE: This view may not be focusable because other views or focus guides are occluding it. 

सब मैं शब्दकोश क्या बिल्ली मतलब occluding में देखा सबसे पहले ....

verb, formal, technical 
    - stop, close up, or obstruct (an opening, orifice, or passage). 

अब सवाल यह था कि मेरा UIButton में बाधा क्या है ???

मैं जल्दी से दृश्य डीबगर में यूआई unwrapped, और वहाँ मेरी UIButtons की चोटी पर एक स्पष्ट विचार था। दृश्य का निरीक्षण करते हुए मुझे पता चला कि आईओएस के विपरीत, जहां nagivationBar के पास एक डिफ़ॉल्ट सिस्टम पृष्ठभूमि रंग है, टीवीओएस के कार्यान्वयन में एक स्पष्ट डिफ़ॉल्ट रंग है। मुझे एहसास हुआ कि मैंने नेविगेशन बार छुपाया नहीं है, और बदले में यह मेरे बटन को बाधित कर रहा था।

मैं निम्नलिखित किया था, और यह मेरी सभी मुद्दों :)

navController.setNavigationBarHidden(true, animated: false) 

आशा इस मदद करता है तय !!!

0

स्विफ्ट 3.0

जेस बोवर के जवाब विशाल मदद करने के लिए मुझे & बहुत समय बचा लिया था।

यहां स्विफ्ट 3 & टीवीओएस 10 के साथ काम किया गया है। अब एक को preferredFocusEnvironments का उपयोग करना है। ViewDidLoad में()

 self.view.addLayoutGuide(focusGuide) 
     self.focusGuide.topAnchor.constraint(equalTo: self.buttonAbove.topAnchor).isActive = true 
     self.focusGuide.bottomAnchor.constraint(equalTo: self.CollectionView.topAnchor).isActive = true 
     self.focusGuide.leadingAnchor.constraint(equalTo: self.CollectionView.leadingAnchor).isActive = true 
     self.focusGuide.widthAnchor.constraint(equalTo: self.CollectionView.widthAnchor).isActive = true 
     self.focusGuide.preferredFocusEnvironments = [self.buttonAbove] 
संबंधित मुद्दे