2013-12-07 3 views
0

У меня есть пользовательский тип UIButtons, созданный прагматически в пользовательском представлении. Вид в основном меню. Я генерация кнопок со следующим кодом, в файле .m отображения вида:UIButton не меняет фон на touchUpInside

-(void) generateButtons: (NSMutableArray *) buttonsArray 
{ 
    UIImage *barItemImage = [[UIImage imageNamed:@"ipad-menubar-button.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 5, 0, 5)]; 

    float buttonWidth = (self.frame.size.width - (2 * FIRSTBUTTONXCOORDINATE) - 25)/ 6.0f; 
    float xCoord = FIRSTBUTTONXCOORDINATE; 
    float yCoord = (self.frame.size.height - BUTTONHEIGHT)/2.0f; 
    for (int i = 0; i < buttonsArray.count; i++) 
    { 
     NSString* buttonTitle = [buttonsArray objectAtIndex:i]; 
     UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
     [button addTarget:self 
       action:@selector(botButtonAction:) 
     forControlEvents:UIControlEventTouchUpInside]; 

     [button setTitle:buttonTitle forState:UIControlStateNormal]; 
     button.frame = CGRectMake(xCoord, yCoord, buttonWidth, BUTTONHEIGHT); 
     button.tag = i; 
     [button setBackgroundImage:barItemImage forState:UIControlStateNormal]; 
     xCoord += buttonWidth + 5; 
     [self addSubview:button]; 
    } 
} 

На touchUpInside, botButtonAction называется, и он делает то, что он должен. Однако кнопки обычно не дают визуального указания на touchUpInside. Когда я touchDown на кнопке и проведите пальцем в любом направлении, тогда я вижу, что цвет фона становится темнее. Иногда я вижу один и тот же визуальный признак на touchUpInside. Это кажется совершенно случайным.

Любые идеи относительно того, что я могу делать неправильно здесь?

Редактировать: К сожалению, я занят другими проблемами. Вот код для botButtonAction и метод вызывается

-(void) botButtonAction: (UIButton *) sender 
{ 
if (self.delegate) 
    [self.delegate optionsMenuAction:self data:sender.tag]; 
} 

-(void)optionsMenuAction:(OptionsMenueView *)view data:(int)tag 
{ 
    if (self.PDFVC) 
    { 
     [self.navigationController popToViewController:self animated:YES]; 
    } 

    if (!self.optionsMenue.isAtWPC || tag != WPC) 
     [self transitionFromViewAtIndex:self.selectedVCIndex toView:tag]; 

    else 
     [self transitionFromViewAtIndex:self.selectedVCIndex toView:WPList]; 
} 

Но так как я использую touchUpInside, эти методы не вызываются на приземление. Я просто хочу, чтобы кнопка была highLight (немного выделяется bg) на touchDown. Как я уже говорил, это происходит на touchDown и салфетки.

Редактировать Я до сих пор работал на реальных устройствах (iPad и iPad 2). Когда я попытался запустить его на симуляторе, я получаю правильный результат. При щелчке мыши кнопка подсвечивается.

Редактировать Я думаю, что я выяснил точную проблему (все еще ищут решение). Если я прикасаюсь точно к кнопке, и прикосновение не охватывает какую-либо часть вставки, то подсветка работает. Однако, если касание охватывает часть кнопки, а также часть вставки/снаружи, то подсветка не работает.

+0

Сложно сказать, не видя, что происходит в 'botButtonAction:'. Не могли бы вы предоставить этот раздел? Кроме того, чтобы дважды проверить, вы понимаете, что 'UIControlEventTouchUpInside' вызывается, когда пользователь поднимает свой палец, не так ли? – Chris

+0

hello user2891327 можете ли вы отправить код botButtonAction: –

ответ

0

поместить этот код в botButtonAction:

-(void)botButtonAction:(UIButton *)sender 
{ 
    [sender setBackgroundImage:[UIImage imageNamed:@"some iamge.png"] 
               forState:UIControlStateNormal]; 
} 

или использовать код ниже код в цикл

[button setBackgroundImage:[UIImage imageNamed:@"back_button_press.png"] forState: UIControlStateHighlighted]; 

или если вы хотите, чтобы дать некоторый цвет, то setcolour кнопки

+0

Я хочу, чтобы кнопка была выделена перед вызовом botButtonAction (на touchDown). –

+0

используйте этот код [кнопка setBackgroundImage: [UIImage imageNamed: @ "back_button_press.png"] forState: UIControlStateHighlighted]; он отобразит изображение (выбранное изображение, когда вы нажмете на него). но когда вы удаляете палец с кнопки, оно меняется на нормальное изображение. –

0

изменения цвет заголовка при нажатии на кнопку наподобие этого

[yourButon setTitleColor:[UIColor colorYouWant] forState:UIControlStateHighlighted]; 

надеюсь, что это поможет вам ......

+0

Удивительно, но это тоже не имеет никакого эффекта. –

1

добавить эту строку:

[button setBackgroundImage:HighlightImage forState:UIControlStateHighlighted]; 
+0

Ввод этого кода в цикл for, не имеет никакого эффекта. –

0

Я имел эту проблему в какой-то момент тоже. Эти другие ответы дадут вам результат, который вы ищете в обычном режиме. Однако ... Вы используете [UIButton buttonWithType: UIButtonTypeCustom]. Что действительно неудобно, если вы не выделяете/не запускаете UIButton. Попробуйте изменить эту строку на обычное распределение кнопок, а затем добавьте следующие строки ответов в эта почта. Это должно сработать для вас.

Короче говоря,

заменить [UIButton buttonWithType:UIButtonTypeCustom]; с [[UIButton alloc] init];

А затем добавьте следующие изменения в код, чтобы изменить изображение.

[myNewlyAllocatedButton setBackgroundImage:[UIImage imageNamed:@"back_button_press.png"] forState: UIControlStateHighlighted]; 
+0

Все еще ничего. Я изменил код, чтобы выделить init, и все по-прежнему работает одинаково. –

+0

Если вы измените цвет кнопки на событии touchupinside. Изменена ли кнопка на этот цвет? –

+0

Да, это действительно так. –

Смежные вопросы