TTBaseNewSegmentedControl
InputA UISegmentedControl subclass with TTBaseUIKit color theming applied at init — selected and normal text colors match the app's design tokens, and a onTapHandle callback replaces target-action boilerplate.
🚀 Usage
// Basic segmented control
let segmented = TTBaseNewSegmentedControl(items: ["All", "Active", "Completed"])
// Select initial segment
segmented.selectedSegmentIndex = 0
// Handle segment change via callback
segmented.onTapHandle = { [weak self] selectedIndex in
switch selectedIndex {
case 0: self?.viewModel.filter = .all
case 1: self?.viewModel.filter = .active
case 2: self?.viewModel.filter = .completed
default: break
}
}
// Add to view
view.addSubview(segmented)
segmented.setLeadingAnchor(constant: 16)
.setTrailingAnchor(constant: 16)
.setTopAnchorWithAboveView(nextToView: titleLabel, constant: 12)
.setHeightAnchor(constant: TTSize.H_BUTTON * 0.8)
// Customize: override selected/normal text colors
class TabSegmentedControl: TTBaseNewSegmentedControl {
override var selectedColor: UIColor { return .systemBlue }
override var normalColor: UIColor { return .systemGray }
override var isBoldSelected: Bool { return true }
}
// Use with UISegmentedControl API
segmented.setTitle("In Progress", forSegmentAt: 1)
segmented.removeSegment(at: 2, animated: true)
segmented.insertSegment(withTitle: "Archived", at: 2, animated: true)
📖 API Reference
| Member | Type | Description |
|---|---|---|
init(items:) | Init | Create with segment titles |
onTapHandle | (Int) → Void | Segment change callback (replaces addTarget) |
selectedColor | UIColor | Override: selected text color |
normalColor | UIColor | Override: unselected text color |
isBoldSelected | Bool | Override: bold font for selected (default: true) |
Pro Tip: For tab-style navigation under a navigation bar (filter tabs), embed
TTBaseNewSegmentedControl inside a TTBaseHeaderView with white background and a bottom separator line. The segment control handles its own theming — just provide the items.