start new:
tmux
start new with session name:
tmux new -s myname
override init(reuseIdentifier: String?) { | |
... | |
// arrowLabel must have fixed width and height | |
arrowLabel.widthAnchor.constraintEqualToConstant(12).active = true | |
arrowLabel.heightAnchor.constraintEqualToConstant(12).active = true | |
titleLabel.translatesAutoresizingMaskIntoConstraints = false | |
arrowLabel.translatesAutoresizingMaskIntoConstraints = false | |
} | |
override func layoutSubviews() { | |
super.layoutSubviews() |
override func numberOfSectionsInTableView(tableView: UITableView) -> Int { | |
return sections.count | |
} |
override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { | |
let header = tableView.dequeueReusableHeaderFooterViewWithIdentifier("header") as? CollapsibleTableViewHeader ?? CollapsibleTableViewHeader(reuseIdentifier: "header") | |
header.titleLabel.text = sections[section].name | |
header.arrowLabel.text = ">" | |
header.setCollapsed(sections[section].collapsed) | |
header.section = section | |
header.delegate = self | |
return header | |
} |
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { | |
let cell = tableView.dequeueReusableCellWithIdentifier("cell") as UITableViewCell? ?? UITableViewCell(style: .Default, reuseIdentifier: "cell") | |
cell.textLabel?.text = sections[indexPath.section].items[indexPath.row] | |
return cell | |
} |
struct Section { | |
var name: String | |
var items: [String] | |
var collapsed: Bool | |
init(name: String, items: [Item], collapsed: Bool = false) { | |
self.name = name | |
self.items = items | |
self.collapsed = collapsed | |
} |
override func viewDidLoad() { | |
super.viewDidLoad() | |
// Auto resizing the height of the cell | |
tableView.estimatedRowHeight = 44.0 | |
tableView.rowHeight = UITableViewAutomaticDimension | |
... | |
} |
class CollapsibleTableViewHeader: UITableViewHeaderFooterView { | |
let titleLabel = UILabel() | |
let arrowLabel = UILabel() | |
override init(reuseIdentifier: String?) { | |
super.init(reuseIdentifier: reuseIdentifier) | |
contentView.addSubview(titleLabel) | |
contentView.addSubview(arrowLabel) | |
} | |
protocol CollapsibleTableViewHeaderDelegate { | |
func toggleSection(header: CollapsibleTableViewHeader, section: Int) | |
} | |
class CollapsibleTableViewHeader: UITableViewHeaderFooterView { | |
var delegate: CollapsibleTableViewHeaderDelegate? | |
var section: Int = 0 | |
... | |
override init(reuseIdentifier: String?) { | |
super.init(reuseIdentifier: reuseIdentifier) | |
... |
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { | |
return sections[(indexPath as NSIndexPath).section].collapsed ? 0 : UITableViewAutomaticDimension | |
} |