2015-10-20 20 views
12

12-13 UICollectionViewCells içeren bir UICollectionView var. UICollectionViewCells kolayca odaklanabilir ve her şey çalışır. UICollectionView dışında bir UIButton var. İlk hücrede ya da ikinci hücrede olursam ve yukarı kaydırdığımda UIButton'a kolayca odaklanabilirim. Üçüncü hücrede olduğumda, odağı UIButton'a taşıyamıyorum. Ne olduğuna dair herhangi bir fikir var mı?UICollectionViewCell to UIButton Odaklama tvOS

enter image description here

cevap

14

Sen odaklanmak istiyorum UIButton kapsayan bir UIFocusGuide kullanmalıdır. UIFocusGuide'ı collectionView kadar geniş ve düğmeyi kapatmak için yeterince uzun. Tercih edilenFocus'u görünüz.

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

Teşekkürler Jess - bu beni deli ediyordu. Bunu kullanırken bir sorun yaşarsanız, bağlantı noktalarınızdan birinin başka bir görünüme gömülmesinden kaynaklanabilir. En iyi bağlantı noktamın çalışmadığı gibi, bir kaydırma görünümünde koleksiyon görünümü ve koleksiyon görünümü altını kullanıyorum. Bunu kaydırma görünümü alt kısmına değiştirmek işe yaradı. – Reefwing

+0

Bir çekicilik gibi çalışır! Teşekkürler. –

+0

Merhaba Jess, Başka bir sorunum var. Solda değil de soldaki düğmem varsa ve yalnızca bir satır koleksiyon görünümüne sahip olursam koleksiyon görünümünde netleme yapamıyorum. Bunun için herhangi bir çözüm var mı? –

2

Jess Bowers çözümü neredeyse orada ama Xcode UIButton ler topAnchor mülkiyet ve benim için çalışmıyor Jess tarafından verilen çözüm olmadığını söylüyor.

Benim için çözüm, en üstte UICollectionView ile aynı genişlikte büyük bir görünüm oluşturmaktı. Resmi görmek.

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, UIView'nin bir alt sınıfı olan UIControl'ün bir alt sınıfıdır. https://developer.apple.com/library/tvos/documentation/UIKit/Reference/UIButton_Class/ Ayrıca bir düğmede topAnchor'u kullanan Apple örneğine bakın. https://developer.apple.com/library/prerelease/tvos/samplecode/UICatalogFortvOS/Listings/UIKitCatalog_FocusGuidesViewController_swift.html –

+0

Tamam ama Xcode düğmelerin topAnchor olmadığını ve maalesef Jess'in çözümünün benim için çalışmadığını söylüyor. – SpaceDog

+0

Başka bir şey yanlış. Sadece tuşumun bir ismiyle yazdım, .topu yazdı ve kaçtı ve otomatik tamamlama bana üstDaha gösterdi. Geçerli Xcode. Ayrıca Jess'in çözümü de benim için çalışmıyor. Kılavuzun çerçevesini bir kesme noktasında inceliyorum ve doğru görünüyor. Ama hiçbir etkisi yok. –

0

Kullanımı:

geçersiz kılma zayıf var preferredFocusedView: UIView

enter image description here

kod olacak? { olsun { dönüş segmentedControl }} Bir öğe seçildiğinde yığının üzerine detay ViewControllers itmek açılış sayfaları için bir UINavigationController kullanılarak dahil bakan oldu konuların

0

biri.

UIButton'ın canBecomeFocused geçersiz kılınması için bir kesme noktası koyuyorum ve bu hızlı küçük uzantıyı kullanarak düğmenin neden odaklanmadığını sormasını istedim.

extension UIView { 
    func whyNotFucusable() { 
     print(self.perform(Selector(("_whyIsThisViewNotFocusable"))).takeUnretainedValue()) 
    } 
} 
Ben Hata ayıklamak çalışırken aşağıdaki hatayı almaya devam etti

....

Ben halt demek kapatılmasıy neyi sözlükten bakılır tüm
ISSUE: This view may not be focusable because other views or focus guides are occluding it. 

İlk ....

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

Şimdiki soru, UIButton'umu hangi görüntüyü engelliyordu ???

Görsel hata ayıklayıcıda UI'yi hızlı bir şekilde açtım ve UIButtons'umun üstünde net bir görüş vardı. Görüntüyü incelediğimde, nilivasyonBar'ın varsayılan bir sistem arka plan rengine sahip olduğu iOS'un aksine, TVOS'un uygulamasının net bir varsayılan rengi vardır. Nav barını saklamadığımı anladım ve karşılığında düğmelerimi engelliyordum.

aşağıdaki yaptım, hepsi benim sorunlarını :) bu yardımcı olur

navController.setNavigationBarHidden(true, animated: false) 

Umut sabit !!!

0

Swift 3.0

Jess Bower'ın cevabı bana & çok zaman kaydedilmiş için büyük bir yardımcı oldu.

Swift 3 & tvOS 10 ile çalışanlar. One şimdi preferredFocusEnvironments'u kullanmalıdır. 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]