2016-08-22 5 views
1

Как определить, выбрана ли кнопка в заголовке коллекции, когда вы заполняете мой просмотр коллекции? У меня есть 2 вкладки в заголовке, которые определяют, какие данные я заполняю в виде коллекции, поэтому я хочу иметь возможность переключать данные и перезагружать представление коллекции, когда пользователь выбирает другую вкладку.Как определить, выбрана ли кнопка в заголовке коллекционного списка при заполнении коллекции?

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

class UserSearchHeader: UICollectionReusableView { 

@IBOutlet weak var friendsButton: UIButton! 
@IBOutlet weak var peopleButton: UIButton! 
@IBOutlet weak var customSlider: UIView! 

override func awakeFromNib() { 
    super.awakeFromNib() 
    self.friendsButton.selected = true 
    customSlider.layer.cornerRadius = customSlider.frame.height/2 

} 

@IBAction func friendsButtonTapped(sender: AnyObject) { 
    if self.friendsButton.selected == false { 
     self.friendsButton.selected = true 
     self.peopleButton.selected = false 
     UIView.animateWithDuration(0.3, animations: {() -> Void in 
      self.customSlider.frame.origin.x = 0 
     }) 
    } 
} 

ответ

0

Есть 2 делегата методы, которые важно решить, какие элементы будут показаны. Например:

У вас есть 2 разные вещи, они заполняются в:

let items1 = [Item]() 
let items2 = [Item]() 

Тогда у вас есть переменная, которая держит, какие элементы должны быть показаны:

let items1Shown:Bool = true 

Теперь реализовать делегат методы с чем-то вроде:

override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    if(items1Shown == true) { 
     return items1.count 
    } else { 
     return items2.count 
    } 
} 

И

override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 

    var item:Item! 

    if(items1Shown == true) { 
     item = items1[indexPath.row] 
    } else { 
     item = items1[indexPath.row] 
    } 

    // format your cell 

} 

и реализовать любую функцию кнопки

func ChangeItems() { 
    if(items1Shown == true) { 
     items1Shown = false 
    } else { 
     items1Shown = true 
    } 

    // reload your collectionView 

    self.collectionView.reloadData() 

} 

Edit:

Почему не давая ваша кнопка цель? (Добавьте это где ваш headerView из очереди!)

headerView.friendsButton.addTarget(self, action: #selector(YourViewControllerWithFunction.cellButtonClick(_:)), forControlEvents: .TouchUpInside) 

// например:

func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView { 
    let headerView = collectionView.dequeueReusableSupplementaryViewOfKind(kind, withReuseIdentifier: headerId, forIndexPath: indexPath) 

    headerView.friendsButton.addTarget(self, action: #selector(YourViewControllerWithFunction.cellButtonClick(_:)), forControlEvents: .TouchUpInside) 

    return headerView 
} 

// Класс YourViewControllerWithFunction

func cellButtonClick(button: UIButton) { 
    // you can do anything with that button now 
} 
+0

Да я знаю, что часть, но у меня есть коллекция view "header", который имеет свой собственный класс. В этом заголовке есть кнопки, из которых я не могу получить доступ через «cellforitematindexpath». Я имею в виду, я предполагаю, что не могу получить к ним доступ, поскольку они находятся в классе заголовков. Это не позволило мне подключить кнопки к классу UICollectionView. –

+0

Просьба показать код вашего класса заголовка и его реализацию. – derdida

+0

Я добавил класс заголовка. Действительно прямо вперед. Заголовок с кнопкой. Необходимо проверить, выбрана ли эта кнопка, чтобы определить, какие данные необходимо заполнить в виде коллекции. –