FUIBaseDrawingTableViewCell

open class FUIBaseDrawingTableViewCell<InnerView> : FUIBaseTableViewCell, InnerViewContainer, FUIStyleByStringAttributes where InnerView : FUIBaseFixedMarginsView, 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! { get }
  • Reuse identifier @return convenience reuseIdentifier

    Declaration

    Swift

    open class var reuseIdentifier: String { get }