Странная функциональность Segmentcontrol происходит
Итак, это то, что происходит. Если я нажимаю на сегмент "0" (самый правый, так как сегмент управления в ios считает 0 справа) из 5 имеющихся у меня сегментов, первый раз он проходит через правильный, который равен "0". Но во второй раз, когда я нажимаю на него, он думает, что я нажал на сегмент 3?! Это очень странно! Кто-нибудь может мне помочь? Вот мой код:
if ([[_segmentControlTableFunctions.subviews objectAtIndex:2]isSelected] )
{
[[_segmentControlTableFunctions.subviews objectAtIndex:2] setTintColor:newSelectedTintColor];
[[_segmentControlTableFunctions.subviews objectAtIndex:1] setTintColor:originalColor];
[[_segmentControlTableFunctions.subviews objectAtIndex:3] setTintColor:originalColor];
[[_segmentControlTableFunctions.subviews objectAtIndex:4] setTintColor:originalColor];
[self removeAllTables];
[self displayTables:[Globals sharedInstance].StartUp.Tables];
self.tableManagement.scrollEnabled = YES;
}else if ([[_segmentControlTableFunctions.subviews objectAtIndex:3]isSelected] ){
[[_segmentControlTableFunctions.subviews objectAtIndex:3] setTintColor:newSelectedTintColor];
[[_segmentControlTableFunctions.subviews objectAtIndex:1] setTintColor:originalColor];
[[_segmentControlTableFunctions.subviews objectAtIndex:2] setTintColor:originalColor];
[[_segmentControlTableFunctions.subviews objectAtIndex:4] setTintColor:originalColor];
[self removeAllTables];
[self displayTables:[Globals sharedInstance].StartUp.Tables];
}else if ([[_segmentControlTableFunctions.subviews objectAtIndex:4]isSelected] ){
[[_segmentControlTableFunctions.subviews objectAtIndex:4] setTintColor:newSelectedTintColor];
[[_segmentControlTableFunctions.subviews objectAtIndex:1] setTintColor:originalColor];
[[_segmentControlTableFunctions.subviews objectAtIndex:2] setTintColor:originalColor];
[[_segmentControlTableFunctions.subviews objectAtIndex:3] setTintColor:originalColor];
[self removeAllTables];
[self displayTables:[Globals sharedInstance].StartUp.Tables];
self.tableManagement.scrollEnabled = YES;
}else if ([[_segmentControlTableFunctions.subviews objectAtIndex:1]isSelected] ){
self.currentTable = @"-1";
_firstTableForCombine = @"-1";
_nextTable = @"-1";
_splitTable = @"-1";
_lastsegmentIndex = -1;
_segmentOneClicked = false;
_segmentTwoClicked = false;
_segmentZeroClicked = false;
[self.SplitForm removeFromSuperview];
[self.roundFrameForSplit removeFromSuperview];
[self.moveOrderToA removeFromSuperview];
[self.moveOrderToB removeFromSuperview];
[[_segmentControlTableFunctions.subviews objectAtIndex:4] setTintColor:originalColor];
[[_segmentControlTableFunctions.subviews objectAtIndex:1] setTintColor:newSelectedTintColor];
[[_segmentControlTableFunctions.subviews objectAtIndex:2] setTintColor:originalColor];
[[_segmentControlTableFunctions.subviews objectAtIndex:3] setTintColor:originalColor];
wait((int*)1000);
[self removeAllTables];
[self displayTables:[Globals sharedInstance].StartUp.Tables];
_segmentControlTableFunctions.selectedSegmentIndex = UISegmentedControlNoSegment;
[NSTimer scheduledTimerWithTimeInterval: 0.2
target: self
selector: @selector (changeToOriginalColor)
userInfo: nil
repeats: NO];
self.tableManagement.scrollEnabled = YES;
}else if ([[_segmentControlTableFunctions.subviews objectAtIndex:0]isSelected] ){
[[_segmentControlTableFunctions.subviews objectAtIndex:0] setTintColor:originalColor];
if(_segmentControlTableFunctions.selectedSegmentIndex == 0 && _segmentZeroClicked)
{
[self Normal];
}else
{
[self magnify];
}
}
ИЗДАННЫЙ КОД:
//This handles all the background color of the segment control when the user clicks on
//one of the functions.
if (_segmentControlTableFunctions.selectedSegmentIndex == 2 )
{
[[_segmentControlTableFunctions.subviews objectAtIndex:2] setTintColor:newSelectedTintColor];
[[_segmentControlTableFunctions.subviews objectAtIndex:1] setTintColor:originalColor];
[[_segmentControlTableFunctions.subviews objectAtIndex:3] setTintColor:originalColor];
[[_segmentControlTableFunctions.subviews objectAtIndex:4] setTintColor:originalColor];
[self removeAllTables];
[self displayTables:[Globals sharedInstance].StartUp.Tables];
self.tableManagement.scrollEnabled = YES;
}else if (_segmentControlTableFunctions.selectedSegmentIndex == 1 ){
[[_segmentControlTableFunctions.subviews objectAtIndex:3] setTintColor:newSelectedTintColor];
[[_segmentControlTableFunctions.subviews objectAtIndex:1] setTintColor:originalColor];
[[_segmentControlTableFunctions.subviews objectAtIndex:2] setTintColor:originalColor];
[[_segmentControlTableFunctions.subviews objectAtIndex:4] setTintColor:originalColor];
[self removeAllTables];
[self displayTables:[Globals sharedInstance].StartUp.Tables];
}else if (_segmentControlTableFunctions.selectedSegmentIndex == 0 ){
[[_segmentControlTableFunctions.subviews objectAtIndex:4] setTintColor:newSelectedTintColor];
[[_segmentControlTableFunctions.subviews objectAtIndex:1] setTintColor:originalColor];
[[_segmentControlTableFunctions.subviews objectAtIndex:2] setTintColor:originalColor];
[[_segmentControlTableFunctions.subviews objectAtIndex:3] setTintColor:originalColor];
[self removeAllTables];
[self displayTables:[Globals sharedInstance].StartUp.Tables];
self.tableManagement.scrollEnabled = YES;
}else if (_segmentControlTableFunctions.selectedSegmentIndex == 3){
self.currentTable = @"-1";
_firstTableForCombine = @"-1";
_nextTable = @"-1";
_splitTable = @"-1";
_lastsegmentIndex = -1;
_segmentOneClicked = false;
_segmentTwoClicked = false;
_segmentZeroClicked = false;
[self.SplitForm removeFromSuperview];
[self.roundFrameForSplit removeFromSuperview];
[self.moveOrderToA removeFromSuperview];
[self.moveOrderToB removeFromSuperview];
[[_segmentControlTableFunctions.subviews objectAtIndex:4] setTintColor:originalColor];
[[_segmentControlTableFunctions.subviews objectAtIndex:1] setTintColor:newSelectedTintColor];
[[_segmentControlTableFunctions.subviews objectAtIndex:2] setTintColor:originalColor];
[[_segmentControlTableFunctions.subviews objectAtIndex:3] setTintColor:originalColor];
wait((int*)1000);
[self removeAllTables];
[self displayTables:[Globals sharedInstance].StartUp.Tables];
_segmentControlTableFunctions.selectedSegmentIndex = UISegmentedControlNoSegment;
[NSTimer scheduledTimerWithTimeInterval: 0.2
target: self
selector: @selector (changeToOriginalColor)
userInfo: nil
repeats: NO];
self.tableManagement.scrollEnabled = YES;
}else if ([[_segmentControlTableFunctions.subviews objectAtIndex:0]isSelected] ){
[[_segmentControlTableFunctions.subviews objectAtIndex:0] setTintColor:originalColor];
if(_segmentControlTableFunctions.selectedSegmentIndex == 0 && _segmentZeroClicked)
{
[self Normal];
return;
}else
{
[self magnify];
return;
}
}
3 ответа
Подпункты не являются статичными. Я подозреваю, что когда вы выбираете вкладку, иерархия представления изменяется (добавляете глянец, изменяете положение или что-то еще), и индексы больше не соответствуют вашим ожиданиям. Как кто-то прокомментировал, выбранный сегмент индекса остается первым. Я настоятельно рекомендую перейти к использованию индекса выбранного сегмента вместо того, чтобы основывать его на индексе в подпредставлениях. Значения, возвращаемые из выбранного индекса, всегда будут правильными.
Так что для тех, кто интересуется, это работает для меня.:)
for (int i = 0; i < self.segmentControlTableFunctions.subviews.count; i++)
{
if ([[self.segmentControlTableFunctions.subviews objectAtIndex:i]isSelected] )
{
[[self.segmentControlTableFunctions.subviews objectAtIndex:i] setTintColor:newSelectedTintColor];
}
else
{
[[self.segmentControlTableFunctions.subviews objectAtIndex:i] setTintColor:originalColor];
}
}
Свойство tintColor предназначено только для изменения оттенка всего элемента управления. Если вы хотите изменить цвет выбранного сегмента по сравнению с невыбранными сегментами, вы должны использовать вместо этого setBackgroundImage:forState:barMetrics:. Вам нужно будет создать одноцветное изображение, если вы хотите именно такой вид. Это может быть сделано следующим образом (sc мой вывод к сегментированному элементу управления):
- (void)viewDidLoad {
[super viewDidLoad];
UIImage *selectedImage = [UIImage imageNamed:@"GreenColor.png"];
UIImage *unselectedImage = [UIImage imageNamed:@"GrayColor.png"];
[self.sc setBackgroundImage:selectedImage forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
[self.sc setBackgroundImage:unselectedImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
}