Swift iOS - представление коллекции тегов

Я пишу свое первое приложение для iOS и хочу просто ответить, какое решение для этого наиболее известно? Это простая коллекция тегов. Я уже просмотрел интернет, но ничего не нашел. Я думаю, что лучший способ - это создать собственную структуру кнопок?

Вот чего я хочу добиться:

Просмотр коллекции Swift Tag

3 ответа

Решение

Я решаю эту проблему, используя представление коллекции.

class FilterController: UIViewController, UICollectionViewDelegateFlowLayout, UICollectionViewDataSource {

    @IBOutlet var collectionView: UICollectionView?


    override func viewDidLoad() {
    super.viewDidLoad()


    // Do any additional setup after loading the view, typically from a nib.
    let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
    layout.sectionInset = UIEdgeInsets(top: 150, left: 10, bottom: 150, right: 10)
    // layout.itemSize = CGSize(width: 90, height: 45)
    layout.itemSize = CGSizeFromString("Aloha")

    collectionView = UICollectionView(frame: self.view.frame, collectionViewLayout: layout)
    collectionView!.dataSource = self
    collectionView!.delegate = self
    collectionView!.registerClass(TagCell.self, forCellWithReuseIdentifier: "TagCell")
    collectionView!.backgroundColor = UIColor.whiteColor()

    self.view.addSubview(collectionView!)
}

Я реализовал представление тегов, используя только представление коллекции.

https://st a ckru.com/images/d4236aa8bb98e5de4d246607c835537f67b9fd38.jpg

Вот ссылка на github.

Иногда вам нужно сделать это самостоятельно:

    let titles = ["Freedom", "God", "Happiness", "Imagination", "Intelligence", "Other"]
var buttons = [UIButton]()

 func createButton(withTitle title: String) -> UIButton {
    let button = UIButton(type: .System)
    button.setTitle(title, forState: .Normal)
    button.titleLabel?.font = UIFont.systemFontOfSize(15.0, weight: UIFontWeightRegular)
    button.layer.borderWidth = 0.5
    button.layer.borderColor = UIColor.lightGrayColor().CGColor
    button.contentEdgeInsets = UIEdgeInsetsMake(5.0, 15.0, 5.0, 15.0)
    button.sizeToFit()
    return button
}

for title in titles
{
    buttons.append(createButton(withTitle: title))
}

func createButtonGrid(withButtons buttons: [UIButton]) {
    let offset = 5.0
    var x = 0.0, y = 0.0, row = 0.0

    let viewFrame = CGRectMake(0.0, 0.0, 250.0, 200.0)
    let view = UIView(frame: viewFrame)
    view.backgroundColor = UIColor.whiteColor()

    for idx in 0..<buttons.count
    {
        let button = buttons[idx]

        row += Double(button.frame.width) + offset

        if row < Double(viewFrame.width)
        {
            x = idx == 0 ? offset : row - Double(button.frame.width)
        }
        else
        {
            x = offset
            row = Double(button.frame.width) + offset
            y += Double(button.frame.height) + offset
        }

        let frame = CGRectMake(CGFloat(x), CGFloat(y), button.frame.width, button.frame.height)
        button.frame = frame

        view.addSubview(button) //quick look
    }
 }

 createButtonGrid(withButtons: buttons)

Просто динамически добавляйте кнопки в superView и меняйте фон в соответствии с вашими требованиями.

Другие вопросы по тегам