FUIBaseDrawingTableViewCell
open class FUIBaseDrawingTableViewCell<InnerView> : FUIBaseTableViewCell, InnerViewContainer, FUIStyleByStringAttributes where InnerView : UIView, InnerView : FUIBackgroundSchemeSupporting, InnerView : FUICalculateLayout, InnerView : FUIStyleByStringAttributes
Base UITableViewCell
subclass, which adds a subview instance implementing Drawing
, and manages its resizing & redrawing.
The FUIBaseDrawingTableViewCell
is generic on its internal
InnerView
, which enables the API of the InnerView
to be exposed on the table view cell by using protocol extensions.
For example, the FUIChartTitleTableViewCell: FUIBaseDrawingTableViewCell<FUIChartTitleView>
is generic on FUIChartTitleView
, which implements the FUITitleComponent
, FUISubtitleComponent
, and FUIStatusComponent
protocols. Extensions to FUIBaseDrawingTableViewCell
are implemented for each of the Component
protocols: FUITitleComponent
, FUISubtitleComponent
, and FUIStatusComponent
, where InnerView
implements the protocol, such that the property is routed to the InnerView
implementation.
Example Composition:
Declare FUIChartTitleView
, implementing the component interfaces
open class FUIChartTitleView: FUIDrawingView, FUITitleComponent, FUISubtitleComponent, FUIStatusComponent {
// MARK: - implement interfaces for `FUITitleComponent`, `FUISubtitleComponent`, `FUIStatusComponent`
public private(set) var title: FUIText = FUIText()
public private(set) var subtitle: FUIText = FUIText()
public private(set) var status: FUIText = FUIText()
Declare FUIChartTitleTableViewCell
, which is generic on FUIChartTitleView
open class FUIChartTitleTableViewCell: FUIBaseDrawingTableViewCell<FUIChartTitleView> {
override func setup() {
// MARK: - internal `_innerView` property is set to instance of `InnerView` class
self._innerView = FUIChartTitleView()
super.setup()
}
}
Implement constrained extension to FUIBaseDrawingTableViewCell
for FUITitleComponent
extension FUIBaseDrawingTableViewCell where InnerView: FUITitleComponent {
public var title: FUIText {
return _innerView.title
}
public var titleAttributedText: NSAttributedString! {
get {
return _innerView.titleAttributedText
}
set {
_innerView.titleAttributedText = newValue
}
}
public var titleStyleClassPath: [FioriStyle] {
get {
return _innerView.titleStyleClassPath
}
set {
_innerView.titleStyleClassPath = newValue
}
}
}
-
Declaration
Swift
public internal(set) var _innerView: InnerView!
-
Reuse identifier @return convenience
reuseIdentifier
Declaration
Swift
open class var reuseIdentifier: String { get }