TTBaseNewSegmentedControl

Input

A 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

MemberTypeDescription
init(items:)InitCreate with segment titles
onTapHandle(Int) → VoidSegment change callback (replaces addTarget)
selectedColorUIColorOverride: selected text color
normalColorUIColorOverride: unselected text color
isBoldSelectedBoolOverride: 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.