在Swift iOS中更改方向更改时更改UICollectionViewCell标签textColor

时间:2018-01-12 12:49:45

标签: ios swift

我想在设备方向改变时更改UICollectionViewCell内UILabel的颜色。我怎样才能做到这一点。

NotificationCenter.default.addObserver(self, selector: #selector(deviceOrientationDidChange),
                                           name: NSNotification.Name.UIDeviceOrientationDidChange, object: nil)

我希望观察者方向更改了单元格内部的通知,但我虽然不对,因为没有办法删除观察者。 问题是如果我在视图控制器中观察方向更改,如何在通知选择器内获取对UICollectionView单元格的引用以更改单元格的标签textColor? 这是我试图使用的:

let indexPath = IndexPath(item: 0, section: 0)
if let cell = collectionView.cellForItem(at: indexPath) as? CommentCell {
    cell.displayNameLabel.textColor = .white
    cell.commentLabel.textColor = .white
}

但我只能访问indexPath的一个单元格视图。当我设置一个Int变量并在cellForRowAtIndexPath中设置它时,没有任何反应,因为它保存了最后一项的值。

4 个答案:

答案 0 :(得分:1)

将它放在cellForRowAt

 if(orinatedLogic)
 {
         cell.displayNameLabel.textColor = .white
         cell.commentLabel.textColor = .white
  }
  else
  {
         cell.displayNameLabel.textColor = .blue
          cell.commentLabel.textColor = .blue
  }

并在方向改变时重新加载集合

答案 1 :(得分:0)

有很多可能性取决于您的要求。我假设您不想重新加载整个集合视图。 但是你可以枚举所有可见的单元格并重新加载它们,

collectionView.reloadItems(at: collectionView.indexPathsForVisibleItems)

或直接更改它们。

collectionView.visibleCells.flatMap{ $0 as? CommentCell}.forEach {
    $0.commentLabel.textColor = ...
}

答案 2 :(得分:0)

对于方向更改,您只需添加

即可
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {

    super.viewWillTransition(to: size, with: coordinator)

       collectionView.reloadItems(at: collectionView.indexPathsForVisibleItems)

}

在项目

的集合视图单元格中
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "item", for: indexPath) as! YourCellType

    cell.displayNameLabel.textColor = UIDevice.current.orientation.isPortrait ? .white : .red

    cell.commentLabel.textColor = UIDevice.current.orientation.isPortrait ? .white : .red

}

就是这样,你做到了!!

答案 3 :(得分:-1)

如果您使用的是Storyboard,则可以使用 Vary for traits 根据方向更改标签颜色。enter image description here