2009-08-19 2 views
1

У меня есть простой UIButton и вы хотите что-то сделать, когда пользователь коснется его, но затем перемещает палец за кнопку и отключает экран. Мне кажется, что мне нужно прослушать событие UIControlEventTouchUpOutside.Странное поведение UIButton: Это нормально?

На мой взгляд, контроллер, я сделал это:

UIButton *bt = [[UIButton alloc] initWithFrame:rect]; 
[bt setBackgroundColor:[UIColor whiteColor]]; 
[bt addTarget:self action:@selector(onTouchUpOutside) forControlEvents:UIControlEventTouchUpOutside]; 
[self.view addSubview:bt]; 

и соответствующий метод действия:

- (void)onTouchUpOutside { 
    NSLog(@"touchUpOutside"); 
} 

Теперь угадайте, что? Я прикасаюсь к кнопке, затем перетаскиваю палец за ее пределы, отрывая экран, и сообщение не регистрируется. В самом деле, мне было бы известно, что произошло событие UIControlEventTouchUpInside, даже если мой палец не находится над кнопкой. Кажется, я могу перемещать палец около 150% от ширины и высоты вокруг этой кнопки при касании, и он скажет мне, что палец был в кнопке, когда я отключаюсь. Но когда я перемещаю его очень далеко (= достаточно далеко), я получаю сообщение «touchUpOutside». Так это просто очередное безумие от яблока, как задержка в -touchesMoved и тому подобное? Или я сделал что-то не так?

ответ

2

Я понял, что это обычное поведение UIKit. Странно, но нормально. Пользователь должен перенести палец достаточно далеко, чтобы «отменить» прикосновение. Если палец находится далеко от нажатой кнопки и подъемника, то срабатывает событие touchUpInside. Не удалось найти текст из apple, говорящий об этом, но я несколько раз тестировал несколько проектов, в том числе новый, с простым UIButton и IBAction. Также некоторый пример кода из apple показывает это же странное поведение.

2

touchUpInside уволен, когда вы слегка двигаете пальцем за кнопку, потому что у людей большие, неточные пальцы.

Если вы действительно хотите изменить это поведение, в touchUpInside обработчике проверить расположение на ощупь, а затем вызвать touchUpOutside обработчик напрямую, если прикоснуться к ней вне кнопки он bounds.

+0

ОК, так что из-за удобства использования ... Я просто удивляюсь, почему эта область настолько невероятна огромна ;-) – 2009-08-19 18:02:23

+2

Люди имеют более толстые пальцы, чем вы думаете, также они глупее. –

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