TVOS

2015-11-21 12 views
5

üzerinde odaklanmış bir UICollectionView'ın ilk hücresinin yapılması, bir UIViewController varsa, bu `preferFocusedView'ı kullanırsam, ancak UICollectionView'ın ilk hücresini oluşturmaya odaklanırsam, TVOS'a odaklanmış bir görünüm yapabilirim? Bunu nasıl yaparım?TVOS

Ben UICollectionViewCell alt sınıfı oluşturmak için çalıştı ve başarılı olamadı yöntemini

- (UIView *)preferredFocusedView { 
    return ([self ifThisIsTheFirstCell]) ? self : nil; 
} 

sahibiz.

Bunu yapmanın bir yolu var mı?

cevap

8

yoludur bazı durumlarda doğru dönmek istemiyorsanız bir "zincir" nin var olduğunu bu UICollectionViewDelegate yöntemi ve herhangi mantık gerekli eklemem gerekiyor Uygulamanızın penceresinden başlayan nesneler, görünüm denetleyicileri ve görünümleri üzerinden aşağı doğru kayar ve zincir, odaklanabilir bir görünümde sona erer. Sonunda bu görünüm, uygulamanız başlatıldığında odaklanılacak veya odaklamanın sıfırlanması gerekiyorsa (örneğin, şu anda odaklanmış görünüm görünüm hiyerarşisinden kaldırılırsa, UIKit'in odaklanmak için başka bir görünüm seçmesi gerekecektir) . preferredFocusedView yöntemi, zinciri nasıl tanımladığınızdır.

Örneğin, UIWindowrootViewController tercih edilen özel görünümüne dönmek preferredFocusedView uygular. Özette, t böyle bir şey yapıyor:

- (UIView *)preferredFocusedView { 
    return [self.rootViewController preferredFocusedView]; 
} 

UIViewController o view mülkü dönmek için preferredFocusedView uygular. UIView sadece kendini geri döndürüyor. Ancak, UICollectionViewUICollectionView, preferredFocusedView değerini farklı şekilde uygular: en basit durumda, ilk hücreyi döndürür. Yani istediğin şeyin bir kısmı senin için zaten yapılmış. Odağınız, koleksiyonunuzdaki ilk hücreye taşınıyorsa, "zincir" içinde daha yüksek bir sorun sorun olur. Oradan

// in your view controller: 
- (UIView *)preferredFocusedView { 
    return myCollectionView; 
} 

, koleksiyon görünüm yapacaktır: görünümünüzü kontrolörün toplama görünümü görünümü denetleyicisi view özellik değilse

, o zaman koleksiyonuna kendiniz odak zincirini rehberlik gerekir Zinciri belirli bir hücreye yönlendirir. Bu yöntemi kullanabilirsiniz

+3

Şimdi konuşuyoruz. Acaba, Apple neden senin gibi insanlara belgeleri yazmıyor. Bunun yerine yazıdan nefret eden insanlar yazıyorlar. MÜKEMMEL! TEŞEKKÜRLER! – SpaceDog

+0

Bazı servislerden veri almayı unuttuysanız [self setNeedsFocusUpdate] yazmayı unutmayın; collectionview reloadData/reloadSection ifadesinden sonra. – NaXir

+0

Hangi hücrenin koleksiyon görünümünde odaklandığı programlı olarak değiştirmeye yönelik herhangi bir kılavuz var mı? – vtcajones

-1

Sen "tercih edilen odak" kavramsal çalışır

func collectionView(collectionView: UICollectionView, shouldUpdateFocusInContext context: UICollectionViewFocusUpdateContext) -> Bool { 
    return true 
    } 
+0

ben yerde bu yöntemi var ama şimdi nasıl odak do bir hücre? – SpaceDog

+0

"Belirli" bir hücreye nasıl odaklanacağınızı mı soruyorsunuz? Sorunuz "ilk hücre" diyor. Uygulamamdaki yukarıdaki yöntem ilk hücreye odaklanmaktadır. Ancak, görünümünüzde birden fazla odaklanabilir öğeniz varsa, – earthtrip

+0

no, yani ilk hücreyi gerektirebilir. Bu bir sebepten dolayı benim için çalışmıyor. BTW, neden ilk hücreden bahsetmişken bu yöntem işe yaramaz? Kendimi iyi açıklamaya çalışıyorum emin değilim.İstediğim: CollectionViewController belirir ve ilk hücreye odaklanır (büyüklükte, odaklanmış bir hücre tvOS içinde olması gerektiği gibi). – SpaceDog

0

Apple İstediğin indexPath dönebilir

func indexPathForPreferredFocusedView(in collectionView: UICollectionView) -> IndexPath? { 
    return IndexPath(item: self.datasourceArray.count, section: 0) 
} 

documentation .. örneğin

IndexPath(item: 0, section: 0)