Closed gerkov77 closed 4 years ago
Ok, problem solved! I needed to learn how to register my subclasses here. I needed to register MyCustomColumnHeaderBackgroundClass.self with the string: JZDecorationViewKinds.columnHeaderBackground in the custom weekFlowlayout's init function. And of course, backgroundColor property is accessible in the custom class' init() from that on.
@gerkov77 Thank you!
I had the same problem and solved it like this. (It's probably the same way!)
class CalendarWeekView: JZBaseWeekView {
//MARK: - JZBaseWeekView Methods
override func setup() {
super.setup()
collectionView.backgroundColor = UIColor.systemBackground // to support Dark Mode
}
override func registerViewClasses() {
super.registerViewClasses()
// overwrite supplementary registers from super.registerViewClasses()
collectionView.register(SOXColumnHeader.self,
forSupplementaryViewOfKind: JZSupplementaryViewKinds.columnHeader,
withReuseIdentifier: JZSupplementaryViewKinds.columnHeader)
/* add register() for other supplementaryViews, too. See below.*/
flowLayout.register(SOXColumnHeaderBackground.self,
forDecorationViewOfKind: JZDecorationViewKinds.columnHeaderBackground)
/* add register() for other decorationViews, too. See below.*/
}
}
// Subclasses for Headers and Backgrounds
class SOXColumnHeader: JZColumnHeader {
public override init(frame: CGRect) {
super.init(frame: .zero)
backgroundColor = .clear // the corresponding background-class will get the correct color
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
class SOXColumnHeaderBackground: JZColumnHeaderBackground {
public override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = UIColor.systemBackground // uses correct color on Dark Mode
}
required public init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
I subclassed
and the corresponding background classes
the same way as shown in the example above.
Best regards! Peter
Great implementation, but there is a problem if you change the apparence from ligth to dark while you are using the app. Have you found a solution for this issue?
Great implementation, but there is a problem if you change the apparence from ligth to dark while you are using the app. Have you found a solution for this issue?
Well, I don't exactly understand what you mean ...
If you start the calendar app while the device is in light mode and set your custom background color and then change it in dark mode, there is no way to change the background again. I hope is now more clear my problem
Thank you! I just works fine for me.
(I don't catch a notification to change the appearance, though.)
https://user-images.githubusercontent.com/792773/115515680-abb44400-a285-11eb-8630-a344a7ba9e7d.MP4
Yes you are right, it works for you beacuse you choose the systembackground color and it's correctly changed in dark appearance by iOS. The problem, for me, is that I don't catch a notification to change the appearance inside the class, so I can't use custum color for the background and also for the label.
Yes you are right, it works for you beacuse you choose the systembackground color and it's correctly changed in dark appearance by iOS.
Which color do you use and in which subclass? A different system provided one or a complete custom?
Yes you are right, it works for you because you choose the systembackground color and it's correctly changed in dark appearance by iOS. The problem, for me, is that I don't catch a notification to change the appearance inside the class, so I can't use custom colour for the background and also for the label.
I was using custom colours -no systemBackrgound stuff- setting two different colour set for dark and light mode. Just set your custom colours in assets and assign it to light and dark modes, then use them with the calendar - there shouldn't be any problem with that..
Please, I have no information about where I can access and set the background properties of these reusable views. Also, what method should be overwritten for changing these, or dequeuing my own subclasses for these items . If anyone could help me out here! Thanks!