Swift TagListViewでタグ入力UI実装
はじめに
今回作りたかったのはこんなありがちなUI

https://github.com/ElaWorkshop/TagListView
このライブラリを使ったら簡単に実装できた。使い方簡単にメモしておく
ハマりポイントはあまりなかったが、タグを追加していったときに高さの取得方法がわからなかったがソース見てたらそれっぽい値が定義されてた。
tagListView.intrinsicContentSize
実装
import UIKit
import TagListView
class ViewController: UIViewController, TagListViewDelegate, UITextFieldDelegate {
let MARGIN: CGFloat = 10
let tagListView = TagListView()
let textField = UITextField()
override func viewDidLoad() {
super.viewDidLoad()
self.setView()
}
func setView() {
view.addSubview(tagListView)
view.addSubview(textField)
tagListView.frame = CGRect(x: MARGIN, y: 50, width: view.frame.width-MARGIN*2, height: 0)
// タグの削除ボタンを有効に
tagListView.enableRemoveButton = true
// 今回は削除ボタン押された時の処理を行う
tagListView.delegate = self
// タグの見た目を設定
tagListView.alignment = .left
tagListView.cornerRadius = 3
tagListView.textColor = UIColor.black
tagListView.borderColor = UIColor.lightGray
tagListView.borderWidth = 1
tagListView.paddingX = 10
tagListView.paddingY = 5
tagListView.textFont = UIFont.systemFont(ofSize: 16)
tagListView.tagBackgroundColor = UIColor.white
// タグ削除ボタンの見た目を設定
tagListView.removeButtonIconSize = 10
tagListView.removeIconLineColor = UIColor.black
// テキストフィールドは適当にセット
textField.delegate = self
textField.placeholder = "タグを入力してください"
textField.returnKeyType = UIReturnKeyType.done
// レイアウト調整
updateLayout()
}
// テキストフィールドの完了ボタンが押されたら
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if 0 < textField.text!.count {
// タグを追加
tagListView.addTag(textField.text!)
// テキストフィールドをクリアしてレイアウト調整
textField.text = nil
updateLayout()
}
return true
}
// タグ削除ボタンが押された
func tagRemoveButtonPressed(_ title: String, tagView: TagView, sender: TagListView) {
// リストからタグ削除
sender.removeTagView(tagView)
updateLayout()
}
func updateLayout() {
// タグ全体の高さを取得
tagListView.frame.size = tagListView.intrinsicContentSize
textField.frame = CGRect(x: MARGIN, y: tagListView.frame.origin.y + tagListView.frame.height + 5, width: view.frame.width-MARGIN*2, height: 40)
}
}以上です