mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
61 lines
2.1 KiB
Swift
61 lines
2.1 KiB
Swift
import Foundation
|
|
import UIKit
|
|
import SegmentedControlNode
|
|
import TelegramPresentationData
|
|
|
|
public final class ItemListControllerSegmentedTitleView: UIView {
|
|
private let segmentedControlNode: SegmentedControlNode
|
|
|
|
public var theme: PresentationTheme {
|
|
didSet {
|
|
self.segmentedControlNode.updateTheme(SegmentedControlTheme(theme: self.theme))
|
|
}
|
|
}
|
|
public var segments: [String] {
|
|
didSet {
|
|
if self.segments != oldValue {
|
|
self.segmentedControlNode.items = self.segments.map { SegmentedControlItem(title: $0) }
|
|
self.setNeedsLayout()
|
|
}
|
|
}
|
|
}
|
|
|
|
public var index: Int {
|
|
get {
|
|
return self.segmentedControlNode.selectedIndex
|
|
}
|
|
set {
|
|
self.segmentedControlNode.selectedIndex = newValue
|
|
}
|
|
}
|
|
|
|
public var indexUpdated: ((Int) -> Void)?
|
|
|
|
public init(theme: PresentationTheme, segments: [String], selectedIndex: Int) {
|
|
self.theme = theme
|
|
self.segments = segments
|
|
|
|
self.segmentedControlNode = SegmentedControlNode(theme: SegmentedControlTheme(theme: theme), items: segments.map { SegmentedControlItem(title: $0) }, selectedIndex: selectedIndex)
|
|
|
|
super.init(frame: CGRect())
|
|
|
|
self.segmentedControlNode.selectedIndexChanged = { [weak self] index in
|
|
self?.indexUpdated?(index)
|
|
}
|
|
|
|
self.addSubnode(self.segmentedControlNode)
|
|
}
|
|
|
|
required public init?(coder aDecoder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
|
|
override public func layoutSubviews() {
|
|
super.layoutSubviews()
|
|
|
|
let size = self.bounds.size
|
|
let controlSize = self.segmentedControlNode.updateLayout(.sizeToFit(maximumWidth: size.width, minimumWidth: 160.0), transition: .immediate)
|
|
self.segmentedControlNode.frame = CGRect(origin: CGPoint(x: floor((size.width - controlSize.width) / 2.0), y: floor((size.height - controlSize.height) / 2.0)), size: controlSize)
|
|
}
|
|
}
|