3. • Мінімалістичний інтерфейс
• Групування даних для легкості
навігації
• Зберігання найрізноманітніших даних
ContactBook
4. • Мінімалістичний інтерфейс
• Групування даних для легкості
навігації
• Зберігання найрізноманітніших даних
• Швидке заповнення даних на основі
створених шаблонів
ContactBook
5. • Мінімалістичний інтерфейс
• Групування даних для легкості
навігації
• Зберігання найрізноманітніших даних
• Швидке заповнення даних на основі
створених шаблонів
• Створення власних шаблонних полів
ContactBook
6. • Мінімалістичний інтерфейс
• Групування даних для легкості
навігації
• Зберігання найрізноманітніших даних
• Швидке заповнення даних на основі
створених шаблонів
• Створення власних шаблонних полів
• Додавання нешаблонних полів
ContactBook
7. • Core Data
Використані технології
import Foundation
import CoreData
class GroupOfLabels: NSManagedObject {
@NSManaged var title: String?
@NSManaged var contact: Contact?
@NSManaged var details_: NSOrderedSet?
var details : [ContactDetail] {
get {
if let orderedSet = details_ {
return orderedSet.array as! [ContactDetail]
} else {
return []
}
}
set {
details_ = NSOrderedSet(array: newValue)
}
}
convenience init() {
let entity = NSEntityDescription.entityForName("GroupOfLabels",
inManagedObjectContext: AppDelegate.managedObjectContext)
self.init(entity: entity!, insertIntoManagedObjectContext:
AppDelegate.managedObjectContext)
}
}
8. • Core Data
• NSOperationQueue
Використані технології
var searchQueue = NSOperationQueue()
searchQueue.qualityOfService = .Background
searchQueue.maxConcurrentOperationCount = 1
func search(searchInObjects searchInObjects: DetailViewCellEditLabel.LabelType, text:
String) {
searchQueue.addOperationWithBlock {
if self.searchQueue.operations.count == 1 {
var indexPath : NSIndexPath!
var resultArrayCount : Int!
switch searchInObjects {
case .Label:
self.filterGroupsByText(text, searchInObjects: .Label)
indexPath = NSIndexPath(forRow: 1, inSection: 0)
resultArrayCount = self.searchResultArray2.count
case .Group:
self.filterGroupsByText(text, searchInObjects: .Group)
indexPath = NSIndexPath(forRow: 2, inSection: 0)
resultArrayCount = self.searchResultArray.count
default: break
}
switch (self.searchCellShow, resultArrayCount) {
case (_, 0):
self.searchAction(.Delete)
case (_, 1) where self.searchResultArray != nil &&
self.searchResultArray.first == text:
self.searchAction(.Delete)
case (_, 1) where self.searchResultArray2 != nil &&
self.searchResultArray2.first?.count == 1 &&
self.searchResultArray2.first?.first?.label == text:
self.searchAction(.Delete)
9. • Core Data
• NSOperationQueue
• Без використання IB
Використані технології
class DetailViewCellDefault : UITableViewCell {
let label = UITextView(editable: false, style: .Label)
let data = UITextView(editable: false, style: .Text)
var cellReuse = false
func setInit() {
contentView.addSubview(label)
contentView.addSubview(data)
contentView.leadingAnchor.constraintEqualToAnchor(label.leadingAnchor).active
= true
contentView.topAnchor.constraintEqualToAnchor(label.topAnchor).active = true
contentView.trailingAnchor.constraintEqualToAnchor(label.trailingAnchor).active
= true
label.bottomAnchor.constraintEqualToAnchor(data.topAnchor).active = true
contentView.leadingAnchor.constraintEqualToAnchor(data.leadingAnchor).active
= true
contentView.trailingAnchor.constraintEqualToAnchor(data.trailingAnchor).active =
true
data.bottomAnchor.constraintEqualToAnchor(contentView.bottomAnchor).active
= true
}
func setConfig(label label: String?, text: String?) {
self.label.text = label
data.text = text
if !cellReuse {
setInit()
cellReuse = true
}
}