如何根据前面段中的选择启用和禁用某些UISegmentedControl段

Nik*_*lai 1 objective-c uisegmentedcontrol ios

我试图根据用户选择的第一个分段控件中的选择启用/禁用2个不同的分段控件中的某些段.

第一段:黑色| 红色| 绿色|

第二段:0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |

第三部分:| 19 | ..... | 36 | 00 |

我想要的功能是,如果用户选择黑色,那么只有第二和第三段中的某些数字应该触发为.enabled = YES

由于第二段和第三段需要第一段的初始输入,因此我在-ViewDidLoad中完全禁用了段

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.

//not sure which one to use and why
[self.secondSegment setEnabled:NO];
//self.secondSegment.enabled = NO;

[self.thirdSegment setEnabled:NO];
//self.thirdSegment.enabled = NO;
}
Run Code Online (Sandbox Code Playgroud)

太棒了,它现在已经被禁用并且是灰色的(期望的行为).但是当用户点击"黑色"时,我希望启用secondSegmentthirdSegment属性中的某些数字,以便用户能够选择:

- (IBAction)colorChosen:(id)sender {

UISegmentedControl *secondRow = self.secondSegment;
UISegmentedControl *thirdRow = self.thirdSegment;
NSString *colorName;
NSInteger colorIndex = [self.colorChosen selectedSegmentIndex];
if (colorIndex == 0) {
    colorName = @"Black";
} else if (colorIndex == 1) {
    colorName = @"Red";
} else if (colorIndex == 2) {
    colorName = @"Green";
}
//NSLog is correct and displays the correct color when you choose
NSLog(@"%@", colorName);

//red numbers are 1,3,5,7,9, 12,14,16,18  19,21,23,25,27, 30,32,34,36
//greens are 0 and 00

//if they selected "Black" I want to re-enable these segments for the secondRow
if (colorIndex == 0) {
    [secondRow setEnabled:YES forSegmentAtIndex:2];
    [secondRow setEnabled:YES forSegmentAtIndex:4];
    [secondRow setEnabled:YES forSegmentAtIndex:6];
    [secondRow setEnabled:YES forSegmentAtIndex:8];
    [secondRow setEnabled:YES forSegmentAtIndex:10];
    [secondRow setEnabled:YES forSegmentAtIndex:11];
    [secondRow setEnabled:YES forSegmentAtIndex:13];
    [secondRow setEnabled:YES forSegmentAtIndex:15];
    [secondRow setEnabled:YES forSegmentAtIndex:17];
}
}
Run Code Online (Sandbox Code Playgroud)

最后,我得到两个段都没有启用(在ViewDidLoad中准备好),并且由于某种原因,当我明确地告诉每个段启用时,它们不会启用.我可以通过简单的方式使整个第二段启用,self.secondSegment.enabled = YES但我不能为我的生活弄清楚为什么我不能启用特定的段.

Mar*_*n R 6

您必须首先启用分段控件.然后,您可以启用或禁用单个细分.

也许你应该始终保持分段控件的启用,并且只根据颜色更新各个段.就像是

[secondRow setEnabled:(colorIndex == 2) forSegmentAtIndex:0];
[secondRow setEnabled:(colorIndex == 1) forSegmentAtIndex:1];
[secondRow setEnabled:(colorIndex == 0) forSegmentAtIndex:2];
[secondRow setEnabled:(colorIndex == 1) forSegmentAtIndex:3];
// ...
Run Code Online (Sandbox Code Playgroud)

当然,这可以通过循环简化.