Statisch — Sam Soffes

Statisch — Sam Soffes


Geplaatst op

Vandaag hebben we een opensource-framework voor iOS ontwikkeld dat we intern heel veel gebruiken, genaamd Static. Het is een Swift 2-framework voor het werken met statische tabelweergaven. We gebruiken het om tonnen schermen van stroom te voorzien in een aankomend project. Het heeft het prototypen van op tabelweergave gebaseerde dingen ook superproductief gemaakt.

Het doel van Static is om modelgegevens te scheiden van de presentatie. Rows en Sections zijn uw “weergavemodellen” voor uw cellen. U geeft eenvoudigweg een celklasse op die u wilt gebruiken en die de hele presentatie afhandelt. Zie het gedeelte Gebruik hieronder voor meer informatie.

Gebouw

Static is geschreven in Swift 2, dus Xcode 7b3 is vereist. Er zijn geen afhankelijkheden behalve systeemframeworks.

Installatie

Carthago is de aanbevolen manier om Static te installeren. Voeg het volgende toe aan uw winkelwagenbestand:

Voor handmatige installatie wordt aanbevolen om het project als subproject aan uw project of werkruimte toe te voegen en het juiste raamwerk als doelafhankelijkheid toe te voegen.

Gebruik

Er is een voorbeeldapp meegeleverd die de functionaliteit van Static demonstreert. Controleer dat eerst als u liever door het voorbeeld leert.

Aan de slag

Om Statisch te gebruiken, moet u definiëren Rows en Sections om uw gegevens te beschrijven. Hier is een eenvoudig voorbeeld:

import Static

Section(rows: (
    Row(text: "Hello")
))

U kunt configureren Sections en Rows voor alles wat je maar wilt. Hier is nog een voorbeeld:

Section(header: "Money", rows: (
    Row(text: "Balance", detailText: "$12.00", accessory: .DisclosureIndicator, selection: {
        // Show statement
    }),
    Row(text: "Transfer to Bank…", cellClass: ButtonCell.self, selection: {
        // Show transfer to bank modal
    })
), footer: "Transfers usually arrive within 1-3 business days.")

Omdat dit Swift is, kunnen we instantiemethoden bieden in plaats van inline blokken voor selecties. Dit maakt het echt leuk. U hoeft indexpaden niet in te schakelen in a tableView:didSelectRowAtIndexPath: meer!

Uiterlijk aanpassen

De Row heeft nooit toegang tot de cel. Dit is zo ontworpen. De Row zou zich niet moeten bekommeren om het uiterlijk, maar moet specificeren wat er mee omgaat. In de praktijk is dit heel prettig verlopen. Onze cellen hebben één verantwoordelijkheid.

Er zijn verschillende aangepaste cellen beschikbaar:

  • Value1Cell — Dit is de standaardcel. Het is een vlakte UITableViewCell met de .Value1 stijl.
  • Value2Cell – Vlak UITableViewCell met de .Value2 stijl.
  • SubtitleCell – Vlak UITableViewCell met de .Subtitle stijl.
  • ButtonCell – Vlak UITableViewCell met de .Default stijl. De textLabel‘S textColor is ingesteld op die van de cel tintColor.

Deze voldoen allemaal aan CellType. De essentie van het protocol is één methode:

func configure(row row: Row)

Deze wordt gebeld DataSource (waar we zo dadelijk meer naar zullen kijken) om de rij in de cel in te stellen. Er is een standaardimplementatie voorzien door het protocol die eenvoudigweg de Row‘S text op de cel textLabelenz. Als je aangepaste dingen moet doen, is dit een geweldige plek om aan de slag te gaan.

Row heeft ook een context eigendom. Je kunt hier alles in stoppen wat de cel moet weten. Je moet proberen hier zo spaarzaam mogelijk gebruik van te maken.

Aangepaste rijaccessoires

Row heeft een accessory eigendom dat een Accessory opsomming. Dit heeft gevallen voor allemaal UITableViewCellAccessoryType. Hier is een rij met een vinkje:

Row(text: "Buy milk", accessory: .Checkmark)

Gemakkelijk genoeg. Sommige typen systeemaccessoires zijn selecteerbaar (zoals dat kleine i knop met een cirkel eromheen). U kunt deze maken en de selectie als volgt afhandelen:

Row(text: "Sam Soffes", accessory: .DetailButton({
  // Show info about this contact
}))

Nogmaals, je kunt hier elke functie gebruiken. Instantiemethoden zijn hiervoor uitstekend geschikt.

Er is nog een geval genaamd .View dat vergt een aangepaste weergave. Hier is een Row met een aangepaste accessoireweergave:

Row(text: "My Profile", accessory: .View(someEditButton))

Aangepaste sectiekop- en voettekstweergaven

Section heeft eigenschappen voor header En footer. Deze nemen een Section.Extremity. Dit is een opsomming met Title En View gevallen. Extremity is StringLiteralConvertible je kunt eenvoudig strings opgeven als je titels wilt zoals wij deden Aan de slag sectie.

Voor een aangepaste weergave kunt u eenvoudigweg de View geval:

Section(header: .View(yourView))

De hoogte die naar de tabelweergave wordt geretourneerd, is die van de weergave bounds.height Zorg er dus voor dat het al de juiste maat heeft.

Werken met de gegevensbron

Om uw aan te sluiten Sections en Rows naar een tabelweergave, initialiseert u eenvoudigweg a DataSource:

let dataSource = DataSource()
dataSource.sections = (
    Section(rows: (
        Row(text: "Hello")
    ))
)

Wijs nu uw tabelweergave toe:

dataSource.tableView = tableView

Zo makkelijk! Als u uw gegevensbron later wijzigt, wordt de tabelweergave automatisch voor u bijgewerkt. Het is belangrijk dat u de tabelweergave niet wijzigt dataSource of delegate. De DataSource moet deze zijn, zodat het gebeurtenissen correct kan afhandelen. Het doel van Static is om dat allemaal van je af te abstraheren.

Inpakken

Er is een voorzien TableViewController dat zet een DataSource voor jou. Hier is een kort voorbeeld:

class SomeViewController: TableViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        dataSource.sections = (
            Section(rows: (
                Row(text: "Hi")
            )),
            // ...
        )
    }
}

Genieten.



Source link

Postagens Similares

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *