2014-12-04 1 views
1

У меня есть число кнопок в scrollView. Если щелкнуть по кнопке, цвет текста изменится, но если я нажму другую кнопку, цвет текста предыдущей кнопки останется неизменным. Я хочу изменить цвет текста предыдущей кнопки в качестве цвета по умолчанию, нажав другую кнопку. Поведение будет таким же, как сегментированный элемент управления. Пожалуйста, помогите мне по этому поводу, я предоставление моего кода ниже:Смена текста Цвет текста Программно для n количества кнопок без изменения текста Цвет другой кнопки

-(void) loadScrollView:(CGRect)scrollViewFrame withButtonArray:(NSArray*)buttonArray withCase: (int)ButtonCase 
{ 
    scrollView=[[UIScrollView alloc]initWithFrame:scrollViewFrame]; 
    [scrollView setScrollEnabled:YES]; 
    [scrollView setBackgroundColor:[UIColor blackColor]]; 
    [scrollView setContentSize:CGSizeMake(100 * 768, 40)]; 

    for (int i = 0; i < [buttonArray count]; i++) 
    { 
     adButtonOutLet = [[UIButton alloc] initWithFrame:CGRectMake(140*i, 0, 135, 40)]; 
     if (ButtonCase==0) { 
      [adButtonOutLet setBackgroundColor:UIColorFromRGB(0X272c2f)]; 
      [adButtonOutLet setTitleColor:UIColorFromRGB(0x969696) forState:UIControlStateNormal]; 
     } 
     else 
     { 
      if (i==0) { 
       adButtonOutLet.backgroundColor=UIColorFromRGB(0x000000) ; 
       [adButtonOutLet setTitleColor:UIColorFromRGB(0x179d95) forState:UIControlStateNormal]; 
      }    
     } 

     adButtonOutLet.titleLabel.font=[UIFont fontWithName:@"MyriadPro" size:14.0]; 
     [adButtonOutLet setTitle:[buttonArray objectAtIndex:i] forState:UIControlStateNormal]; 
     adButtonOutLet.userInteractionEnabled= YES; 
     [adButtonOutLet setTag:i]; 
     [adButtonOutLet addTarget:self action:@selector(adButtonAction:) forControlEvents:UIControlEventTouchUpInside]; 

     [scrollView addSubview:adButtonOutLet]; 
     [self.view addSubview:scrollView]; 
    } 
} 

Вот мой метод действия:

-(void)adButtonAction:(UIButton*)sender 
{ 
    for (int i = 0; i < [menuArray count]; i++) 
    { 
     int prevTag = 0; 
     if (sender.tag == i && Case==0) 
     {     
      [self reloadScrollViewwithButtonTag:i]; 
      // [sender setSelected:YES]; 
      sender.backgroundColor=UIColorFromRGB(0x000000) ; 
      [sender setTitleColor:UIColorFromRGB(0x179d95) forState:UIControlStateNormal]; 
      prevTag=i; 
     } 

     if (Case==1) { 
      sender.backgroundColor=UIColorFromRGB(0x000000) ; 
      [sender setTitleColor:UIColorFromRGB(0x179d95) forState:UIControlStateNormal]; 
      if (sender.tag==prevTag-1) { 
       [sender setBackgroundColor:UIColorFromRGB(0X272c2f)]; 
       [sender setTitleColor:UIColorFromRGB(0x969696) forState:UIControlStateNormal]; 
      } 
     }    
    } 
} 

ответ

2

Почему вы не попытаться изменить все кнопки стиля не выбрано, кроме тот, который находится на параметре отправителя (выбранная кнопка)?

-(void)adButtonAction:(UIButton*)sender{ 
    for (int i = 0; i < [menuArray count]; i++) 
    { 
     if (sender == menuArray[i]) 
     { 
      //Selected code style 
     } 

     else{ 
      //No selected code style 
     } 
    } 
} 

Учитывая, что menuArray представляет собой массив со всеми кнопками. Таким образом вы проверяете и изменяете все стили при нажатии кнопки.

Надеюсь, это может помочь вам или, наконец, дать вам ключ к решению вашей проблемы.

1

Я не понимаю все в вашем методе adButtonAction (что такое menuArray?), Но я думаю, что вам нужно просто, просто приспособи его к вашему методу.

Сначала создайте NSMutableArray сохранить ссылку на свой список кнопки:

for (int i = 0; i < [buttonArray count]; i++) 
{ 
    adButtonOutLet = [[UIButton alloc] initWithFrame:CGRectMake(140*i, 0, 135, 40)]; 
    [myButtonArray addObject:adButtonOutlet]; 
.... 

Тогда в вас метод действия, установить правильный цвет:

for (UIButton* b in myButtonArray){ 
    if(b.tag == sender.tag){ 
     [self setSelectedColor:YES forButton:b]; 
     // Do what you want here 
    } 
    else{ 
     [self setSelectedColor:NO forButton:b]; 
    } 
} 

С:

-(void)setSelectedColor:(BOOL)selected forButton:(UIButton)button{ 
    if(selected){ 
     sender.backgroundColor=UIColorFromRGB(0x000000) ; 
     [sender setTitleColor:UIColorFromRGB(0x179d95) forState:UIControlStateNormal]; 
    } 
    else{ 
     [sender setBackgroundColor:UIColorFromRGB(0X272c2f)]; 
     [sender setTitleColor:UIColorFromRGB(0x969696)forState:UIControlStateNormal]; 
    } 
} 
1
  • Применить состояние тисков (нормальный, выбранный) t itle цвет кнопки.
  • Просто сохраняйте выбранную кнопку ссылкой как слабую.
  • пока пользователь нажал кнопку, эта кнопка будет выбрана как обычная.
  • Изменение последнего выбранного состояния кнопки Обычный вместо Выбрано.

Проверьте ниже код, который будет помогать вам

UIButton *selectedButton; 
-(void)adButtonAction:(UIButton*)sender 
{ 
     UIButton *tempButton = sender; 
     if (selectedButton && selectedButton!=tempButton) 
     { 
      [selectedButton setSelected:NO]; 
     } 
     [tempButton setSelected:YES]; 
     selectedButton = tempButton; 
}