Estático – Sam intudo
Postado em
Hoje, abrimos uma estrutura para o iOS que usamos uma tonelada chamada de estática internamente. É uma estrutura Swift 2 para trabalhar com vistas estáticas da tabela. Nós o usamos para alimentar toneladas de telas em um próximo projeto. Também tornou as coisas baseadas em visualização de prototipagem de tabela super produtivas.
O objetivo da Static é separar os dados do modelo da apresentação. Rowareia SectionS são seus “modelos de visualização” para suas células. Você simplesmente especifica uma classe de células para usar e que lida com toda a apresentação. Veja a seção de uso abaixo para obter detalhes.
Prédio
A estática está escrita no Swift 2, então o Xcode 7B3 é necessário. Não há dependências além das estruturas do sistema.
Instalação
Cartago é a maneira recomendada de instalar estática. Adicione o seguinte ao seu arquivo Cart:
Para instalação manual, é recomendável adicionar o projeto como um subprojeto ao seu projeto ou espaço de trabalho e adicionar a estrutura apropriada como uma dependência de destino.
Uso
Um exemplo de aplicativo está incluído demonstrando a funcionalidade da estática. Confira isso primeiro se você preferir aprender pelo exemplo.
Começando
Para usar estático, você precisa definir Rowareia Sections para descrever seus dados. Aqui está um exemplo simples:
import Static
Section(rows: (
Row(text: "Hello")
))
Você pode configurar Sectionareia Rows para qualquer coisa que você quiser. Aqui está outro exemplo:
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.")
Como isso é rápido, podemos fornecer métodos de instância em vez de blocos embutidos para seleções. Isso torna as coisas muito boas. Você não precisa ligar os caminhos de índice em um tableView:didSelectRowAtIndexPath: não mais!
Aparência de personalização
O Row nunca tem acesso à célula. Isso é por design. O Row Não deve se importar com sua aparência, outro especificando o que lidará com isso. Na prática, isso tem sido muito bom. Nossas células têm uma responsabilidade.
Existem várias células personalizadas fornecidas:
-
Value1Cell– Esta é a célula padrão. É uma planícieUITableViewCellcom o.Value1estilo. -
Value2Cell– SimplesUITableViewCellcom o.Value2estilo. -
SubtitleCell– SimplesUITableViewCellcom o.Subtitleestilo. -
ButtonCell– SimplesUITableViewCellcom o.Defaultestilo. OtextLabel‘stextColorestá definido para a célulatintColor.
Tudo isso em conformidade com CellType. A essência do protocolo é um método:
func configure(row row: Row)
Isso é chamado por DataSource (que veremos mais em um minuto) para definir a linha na célula. Existe uma implementação padrão fornecida pelo protocolo que simplesmente define o Row‘s text na célula textLabeletc. Se você precisar fazer coisas personalizadas, este é um ótimo lugar para se conectar.
Row também tem um context propriedade. Você pode colocar o que quiser aqui que a célula precisa saber. Você deve tentar usá -lo o mais rápido possível.
Acessórios de linha personalizados
Row tem um accessory propriedade que é um Accessory enum. Isso tem casos para todos UITableViewCellAccessoryType. Aqui está uma linha com uma marca de seleção:
Row(text: "Buy milk", accessory: .Checkmark)
Fácil o suficiente. Alguns dos tipos de acessórios do sistema são selecionáveis (como esse pouco eu botão com um círculo ao redor). Você pode fazer isso e lidar com a seleção como esta:
Row(text: "Sam Soffes", accessory: .DetailButton({
// Show info about this contact
}))
Novamente, você pode usar qualquer função aqui. Os métodos de instância são ótimos para isso.
Há um caso adicional chamado .View Isso leva uma visualização personalizada. Aqui está um Row com uma visualização de acessório personalizada:
Row(text: "My Profile", accessory: .View(someEditButton))
Visualizações de cabeçalho e rodapé personalizados
Section tem propriedades para header e footer. Estes tomam um Section.Extremity. Este é um enumeração com Title e View casos. Extremity é StringLiteralConvertible você pode simplesmente especificar seqüências Começando seção.
Para uma visão personalizada, você pode simplesmente especificar o View caso:
Section(header: .View(yourView))
A altura retornada à vista da tabela será a vista bounds.height Portanto, certifique -se de que já está dimensionado corretamente.
Trabalhando com a fonte de dados
Para conectar o seu Sectionareia Rows para uma visualização de tabela, simplesmente inicialize um DataSource:
let dataSource = DataSource()
dataSource.sections = (
Section(rows: (
Row(text: "Hello")
))
)
Agora atribua sua visualização de tabela:
dataSource.tableView = tableView
Fácil assim! Se você modificar sua fonte de dados posteriormente, ele atualizará automaticamente a visualização da tabela para você. É importante que você não mude a visualização da tabela dataSource ou delegate. O DataSource precisa ser aqueles para que possa lidar com eventos corretamente. O propósito de Static é abstrair tudo isso longe de você.
Embrulhando
Há um fornecido TableViewController que configura um DataSource para você. Aqui está um pequeno exemplo:
class SomeViewController: TableViewController {
override func viewDidLoad() {
super.viewDidLoad()
dataSource.sections = (
Section(rows: (
Row(text: "Hi")
)),
// ...
)
}
}
Aproveitar.
