2013-11-11 4 views
7

Я создал новый проект в приложении Xcode - Single View. Приложение имеет только две кнопки.Задержка выделенного состояния UIButton на iOS 7

UIButton *button1 = [UIButton buttonWithType:UIButtonTypeCustom]; 
[button1 setBackgroundColor:[UIColor greenColor]]; 
[button1 setFrame:CGRectMake(0, self.view.frame.size.height-40-100, self.view.frame.size.width, 40)]; 
[button1 setTitle:NSLocalizedString(@"button 1", nil) forState:UIControlStateNormal]; 
[button1 setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; 
[button1 setTitleColor:[UIColor blueColor] forState:UIControlStateHighlighted]; 
[self.view addSubview:button1]; 

UIButton *button2 = [UIButton buttonWithType:UIButtonTypeCustom]; 
[button2 setBackgroundColor:[UIColor greenColor]]; 
[button2 setFrame:CGRectMake(0, self.view.frame.size.height-40, self.view.frame.size.width, 40)]; 
[button2 setTitle:NSLocalizedString(@"button 2", nil) forState:UIControlStateNormal]; 
[button2 setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; 
[button2 setTitleColor:[UIColor blueColor] forState:UIControlStateHighlighted]; 
[self.view addSubview:button2]; 

Когда я запускаю это приложение на iPhone с прошивкой 7 второй кнопкой имеет задержку состояния выделения при нажатии на эту кнопку. На iPhone с iOS 6 секундная кнопка работает отлично.

Почему кнопка на iOS 7 имеет задержку выделения?

+0

Можете ли вы показать метод, в котором вы добавляете их в свой вид. т. е. весь метод для этого. – sbarow

+0

Я добавляю эти две кнопки в методе viewDidLoad. Это приложение просмотра sigle - это только тестовое приложение. Я хочу проверить, будет ли кнопка задерживаться в очень простом приложении, например, в моем «обычном» приложении. – murzynpl

+0

попытайтесь удалить строку локализации, а затем протестируйте – Retro

ответ

1

Попробуйте перегрузить этот метод в спиральном виде подклассе:

- (BOOL)touchesShouldCancelInContentView:(UIView *)view 
{ 
    // fix conflicts with scrolling and button highlighting delay: 
    if ([view isKindOfClass:[UIButton class]]) 
     return YES; 
    else 
     return [super touchesShouldCancelInContentView:view]; 
} 
+0

Для моего случая это почему-то не получилось, но спасибо за публикацию. Я также опубликовал решение, которое я использовал для конкретного случая у меня были проблемы, не знаю, поможет ли это. –

2

Моей проблема была у меня была UIButton как подвид из поискового вызова UIScrollView, поэтому я хотел, чтобы пользователь имел возможность сделать правильные салфетки над областью, где кнопка была без нее, нажимая кнопку. В iOS6, если вы делаете это по закругленной правой кнопке, она работает нормально, но в iOS7 она также работает, но кнопка не будет вызывать ее подсветку. Таким образом, чтобы исправить это, я осуществил мой собственный UIButton с помощью longPressGestureRecognizer:

- (void) longPress:(UILongPressGestureRecognizer *)longPressGestureRecognizer 
{ 
    if (longPressGestureRecognizer.state == UIGestureRecognizerStateBegan || longPressGestureRecognizer.state == UIGestureRecognizerStateChanged) 
    { 

     CGPoint touchedPoint = [longPressGestureRecognizer locationInView: self]; 

     if (CGRectContainsPoint(self.bounds, touchedPoint)) 
     { 
      [self addHighlights]; 
     } 
     else 
     { 
      [self removeHighlights]; 
     } 
    } 
    else if (longPressGestureRecognizer.state == UIGestureRecognizerStateEnded) 
    { 
     if (self.highlightView.superview) 
     { 
      [self removeHighlights]; 
     } 

     CGPoint touchedPoint = [longPressGestureRecognizer locationInView: self]; 

     if (CGRectContainsPoint(self.bounds, touchedPoint)) 
     { 
      if ([self.delegate respondsToSelector:@selector(buttonViewDidTouchUpInside:)]) 
      { 
       [self.delegate buttonViewDidTouchUpInside:self]; 
      } 
     } 
    } 
} 

Тогда при инициализации longPressGestureRecognizer и вы:

self.longPressGestureRecognizer.minimumPressDuration = .05; 

Это позволит сделать салфетки на кнопку без он запускает его, а также позволяет вам нажимать кнопку и иметь триггер подсветки. Надеюсь это поможет.

0

Я не уверен, что OP просто хочет визуальной обратной связи, но если это так, то установление свойства showsTouchWhenHighlighted в значение YES/true в коде или проверка опции Shows Touch On Highlight в IB выполнит это.

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