1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- /*
- * Copyright (c) Facebook, Inc. and its 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 "RCTEventDispatcher.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<NSString *> *)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
|