2016-03-23 39 views
1

Yani bu sorun oldukça basittir. (MyProfileHeader.swift) numaralı bir başlık ile UICollectionViewController(MyProfile.swift) var. İkincisi içinde, collection view cells (UICollectionViewController içinde sonuncusunun sınıfının bir örneğini başlatmak istemiyorum) öğelerinin farklı öğelerini döndürmek için UISegmentedControl var. Bu benim MyProfile.swift class kodum. Farklı sorguları (hangisi çalışır) döndürmek için viewForSupplementaryElementOfKind yönteminde bir hedef eklemeyi denedim, ancak sonuçta numberOfItemsInSection ve cellForItemAtIndexPath yöntemlerinde bölümlenmiş kontrole erişmem gerekiyor. "testObjects" ve "writeObjects", viewForSupplementaryElementOfKind'da addTarget yöntemiyle sorgulanan array değerleridir. indexPath'u ancak ve error 'u açık nedenlerle belirledim ... Bölümlenmiş kontrole nasıl erişebilirim? başlık viewForSupplementaryElementOfKind toplama görünümü için geri alındığındaUISegmentedControl'e UICollectionViewController başlığına nasıl erişebilirim?

override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 

    var numberOfItems: Int? = 0 

    let indexPath = NSIndexPath(forItem: 0, inSection: 0) 

    let header = collectionView.dequeueReusableSupplementaryViewOfKind(UICollectionElementKindSectionHeader, withReuseIdentifier: "header", forIndexPath: indexPath) as! MyProfileHeader 


    if header.userContent.selectedSegmentIndex == 1 { 
     numberOfItems = textObjects.count 
    } else if header.userContent.selectedSegmentIndex == 2 { 
     numberOfItems = 0 
    } else { 
     numberOfItems = photoObjects.count 
    } 



    print("F: \(numberOfItems!)") 
    return numberOfItems! 
} 

cevap

1

, sen MyProfile kendisine zayıf başvuru saklayabilir.

class MyProfile: UICollectionViewController { 
... 
... 
weak var header: MyProfileHeader? 
...  
... 
func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView { 
    header = collectionView.dequeueReusableSupplementaryViewOfKind(UICollectionElementKindSectionHeader, withReuseIdentifier: "header", forIndexPath: indexPath) as! MyProfileHeader 

    return header 
} 

Daha sonra UICollectionViewController başka işlevi bu erişebilirsiniz.

başlık viewForSupplementaryElementOfKind yaratılmıştır önce numberOfItemsInSection ve cellForItemAtIndexPath çağrılabilir, bu nedenle, numberOfItemsInSection içinde cellForItemAtIndexPath erişmek veya zaman başka bir yerde boş olup olmadığını kontrol etmelidir ve sonra parçalı kumanda varsayılan olduğunu kabul olduğunu Not değer (bu, görüntü ilk kez görüntülendiğinden beri olacak).

let selectedSegmentIndex = header?.userContent.selectedSegmentIndex ?? 0 //0 is the default value here 
+0

gibi bir şey seni önerdi denedim ama hata alıyorum: henüz oluşturulmadı çünkü başlığını erişirken – user4513956

+0

Belki bir null alıyorsanız "isteğe bağlı değer unwrapping ederken beklenmedik nil bulundu". Bunu karşılamak için cevabımı düzenledim. – davedavedave

+0

Üzgün ​​@davedavedave, bu kodu nereye ekleyeceğimi düşünmüyorum ... bu, viewDidLoad veya ...? Ayrıca, çok teşekkürler haha ​​ – user4513956

İlgili konular