2016-09-19 4 views
0

У меня есть UICollectionView, и пользователь может выбрать ячейку для использования функции в ней. Поэтому, и мне нужно, чтобы первая ячейка была выбрана, как в первом скриншоте. Но проблема в том, что когда ячейка выбрана, и пользователь хочет выбрать другую ячейку, первая ячейка не отменяет. Я попробовал перезагрузить табличное представление в выбранном элементе, но это не работает или с этим func в viewdidload LabelCollectionView.selectItem(at: IndexPath(row: 1, section: 0), animated: true, scrollPosition: .bottom) SelectItem в UICollectionView при первой загрузке

У кого-нибудь есть идея, что я могу там сделать? спасибо за помощь :)

First Cell Selected

Here you see the Problem in the screenshot

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


    let labels = Labels[indexPath.row] 


    cell.backgroundColor = UIColor.lightGray 
    cell.layer.cornerRadius = 10 

    cell.Title.text = labels 



    if indexPath.row == 0 { 
     cell.backgroundColor = darkgrau 
     cell.layer.borderColor = black.cgColor 
     cell.layer.borderWidth = 2.0 
    } 


    return cell 

} 



func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
    let cell = collectionView.cellForItem(at: indexPath) as! StoryLabelCell 


    if indexPath.row == indexPath.row { 
     cell.backgroundColor = darkgrau 
     cell.layer.borderColor = black.cgColor 
     cell.layer.borderWidth = 2.0 
    } 

} 




func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) { 
    let cell = collectionView.cellForItem(at: indexPath) as! StoryLabelCell 


    if indexPath.row == indexPath.row { 

     cell.backgroundColor = lightGray 
     cell.layer.borderWidth = 0 
    } 

} 

ответ

0

Что вы пытаетесь сделать с проверки indexPath.row == indexPath.row? В основном вы можете попробовать с cell.selected = true, когда он выбран, и установите его на false, когда его не выбрали. Попробуйте под кодом и сообщите мне, если он работает.

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

    let labels = Labels[indexPath.row] 
    cell.backgroundColor = UIColor.lightGray 
    cell.layer.cornerRadius = 10 
    cell.Title.text = labels 

    if indexPath.row == 0 { 
     cell.backgroundColor = darkgrau 
     cell.layer.borderColor = black.cgColor 
     cell.layer.borderWidth = 2.0 
     cell.selected = true 
    } 

    return cell 
} 

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
    let cell = collectionView.cellForItem(at: indexPath) as! StoryLabelCell 

    cell.backgroundColor = darkgrau 
    cell.layer.borderColor = black.cgColor 
    cell.layer.borderWidth = 2.0 
    cell.selected = true 
} 

func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) { 
    let cell = collectionView.cellForItem(at: indexPath) as! StoryLabelCell 

    cell.backgroundColor = lightGray 
    cell.layer.borderWidth = 0 
    cell.selected = false 
} 
+0

Я использовал для установки других ячеек светло-серыми (не выбранными) в {index path.row == index path.row} else {}, но он не запускается, он дает мне только выбранную ячейку. Таким образом, он запускается, но проблема заключается в том, что когда я хочу выбрать другую ячейку, первая ячейка (что выбрана) не уходит, а затем выбираются две ячейки. В любом случае я должен изменить select (светло-серый) первой ячейки, когда я нажимаю другую ячейку. –

+0

Да, как это работает, вы должны пометить его как selected = true, чтобы изменить пользовательский интерфейс и установить его обратно в значение false при выборе других ячеек. Вы писались с кодом выше? – Santosh

+0

Да, я попробовал, но это не работает, дайте это, возможно, другим способом в didSelectItemAt? –

0

u должен использовать выбранное состояние Ячейки вместо сравнения двух значений, которые являются одинаковыми.

В вашей пользовательской ячейке вы реагируете на выбор клеток!

override func setSelected(_ selected: Bool, animated: Bool) { 
    // change your cell like you want 
    if selected { 
     // make me dark 
    } else { 
     // make me light 
    } 
    // not tested, but somehow call the super 
    super.setSelected(selected:selected, animated: animated) 
} 

Вы можете удалить свои didSelect и didDeselct func.

В функции cellForItem ... вы можете проверить, если выбрана ячейка, если не выбрать один с indexPath.row == 0

Для проверки выбранного использования клеток

collectionView.indexPathForSelectedItems 

это это список, поэтому вы можете выбрать более одной ячейки. Я не уверен, но я думаю, что вы можете настроить collectionView с несколькими вариантами выбора только один выбор.

Надеюсь, это поможет вам до сих пор.

Смежные вопросы