2017-10-04 62 views
0

我有一個水平的按鈕集合視圖。當他們中的一個被點擊時,用戶被帶到另一個視圖控制器。通常情況下,並非所有按鈕都可見,所以我希望所選按鈕位於集合視圖的最左側。ScrollToItem工作不正常

我試圖用scrollToItem函數做到這一點。問題是,它每次都一直向右滾動收集視圖。

相關代碼:

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    return labelArray.count 
} 

//frees up the collection view when the scroll is active 
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) { 
    isScrolling = true 
} 

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) 

    //possible problem 
    if isScrolling == false { 
     collectionView.scrollToItem(at: indexPath, at: UICollectionViewScrollPosition.left, animated: false) 
    } 

    let myLabel = cell.viewWithTag(1) as! UILabel 

    let myArray = labelArray[indexPath.row] 

    myLabel.text = labelArray[indexPath.row] 
    myLabel.textColor = UIColor.white 

    if myArray == labelArray[1] { 
     cell.backgroundColor = UIColor.black 
    } else { 
     cell.backgroundColor = UIColor(red: 56/255, green: 120/255, blue: 195/255, alpha: 1) 
    } 

    return cell 
} 

任何幫助將不勝感激。

回答

0

我得到它的工作。我所做的只是改變

if isScrolling == false { 
    collectionView.scrollToItem(at: indexPath, at: UICollectionViewScrollPosition.left, animated: false) 
} 

if isScrolling == false { 
    let i = IndexPath(item: 1, section: 0) 
    collectionView.scrollToItem(at: i, at: .right, animated: false) 
} 

以前它會滾動到每個細胞,而不在每一個單獨停止。

因此,對於每個項目,我根據所選擇的部分硬編碼值。

0

您正在調用cellForItemAt方法中的scrollToItem方法,該方法爲集合視圖中的每個可見單元調用。所以你基本上試圖滾動到每個單元格,因爲它變得可見。嘗試調用scrollToItem方法在這樣的方法didSelectItemAt:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
    collectionView.scrollToItem(at: indexPath, at: .left, animated: true) 
} 

的didSelectItemAt當選擇小區和提供所選擇的小區的IndexPath只調用。

+0

所以我嘗試在didSelectItemAt方法中實現這一點。它確實阻止了收集視圖從開始滾動到右側,問題在於它沒有對它做任何事情。 –

+0

我測試了上面的代碼,請參閱編輯,在我構建的簡單集合視圖應用程序中工作。沒有看到你是如何實現didSelectItemAt方法或類中的其他代碼的,我不確定你的問題在哪裏。 – bjd23

+0

我知道它在cellForItemAt方法中工作。只需要硬編碼項目索引。我會發布答案。謝謝你的幫助。 –