/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #import "RCTSegmentedControl.h" #import "RCTConvert.h" #import "UIView+React.h" @implementation RCTSegmentedControl - (instancetype)initWithFrame:(CGRect)frame { if ((self = [super initWithFrame:frame])) { _selectedIndex = self.selectedSegmentIndex; [self addTarget:self action:@selector(didChange) forControlEvents:UIControlEventValueChanged]; } return self; } - (void)setValues:(NSArray *)values { _values = [values copy]; [self removeAllSegments]; for (NSString *value in values) { [self insertSegmentWithTitle:value atIndex:self.numberOfSegments animated:NO]; } super.selectedSegmentIndex = _selectedIndex; } - (void)setSelectedIndex:(NSInteger)selectedIndex { _selectedIndex = selectedIndex; super.selectedSegmentIndex = selectedIndex; } - (void)setBackgroundColor:(UIColor *)backgroundColor { #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && defined(__IPHONE_13_0) && \ __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0 if (@available(iOS 13.0, *)) { [super setBackgroundColor:backgroundColor]; } #endif } - (void)setTextColor:(UIColor *)textColor { #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && defined(__IPHONE_13_0) && \ __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0 if (@available(iOS 13.0, *)) { [self setTitleTextAttributes:@{NSForegroundColorAttributeName : textColor} forState:UIControlStateNormal]; } #endif } - (void)setTintColor:(UIColor *)tintColor { [super setTintColor:tintColor]; #if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && defined(__IPHONE_13_0) && \ __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_13_0 if (@available(iOS 13.0, *)) { [self setSelectedSegmentTintColor:tintColor]; [self setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]} forState:UIControlStateSelected]; [self setTitleTextAttributes:@{NSForegroundColorAttributeName : tintColor} forState:UIControlStateNormal]; } #endif } - (void)didChange { _selectedIndex = self.selectedSegmentIndex; if (_onChange) { _onChange(@{@"value" : [self titleForSegmentAtIndex:_selectedIndex], @"selectedSegmentIndex" : @(_selectedIndex)}); } } @end