2013-06-10 1 views
1

У меня был UIView с большим количеством объектов. У меня также была реализация touchesMoved так:touchsMoved больше не запускает после изменения UIView в UIScrollView?

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    NSLog(@"move"); 
} 

Недавно я хотел вид для прокрутки, так что я просто открыл UIView, и в Interface Builder изменил класс объектов UIScrollView. Однако теперь метод touchsMoved никогда не вызывается даже при касании экрана.

Может кто-то, пожалуйста, помогите мне получить touchhesMoved снова? Я не уверен, что я сделал, чтобы сломать его!

EDIT: Я пробовал следовать this guide, но я, возможно, сделал что-то неправильно. Из чтения других сообщений кажется, что UIScrollView не может принимать события касания сам, и им нужно отправить цепочку ответчиков? Я буду чрезвычайно благодарен всем, кто может помочь мне в решении этой проблемы ... мое приложение было готово для представления, когда я понял, что UIScrolView убил мое обнаружение касания! (Я просто изменил свои UIView приложения на UIScrollView, чтобы обеспечить совместимость с iPhone 4).

+0

Ваш вопрос похож на [этот] (http://stackoverflow.com/questions/12259005/uiscrollview-with-touchesmoved-not-called). Возможно, одно из предложений может сработать для вас? –

+0

Спасибо за ссылку. Они рекомендуют устанавливать _mainScroller.delaysContentTouches = NO; и _mainScroller.canCancelContentTouches = NO; Я сделал это, и мои прикосновения до сих пор не обнаружены. – jake9115

ответ

3

Я только что посмотрел the guide в вашем редактировании, и я думаю, что вижу проблему. См. this answer по аналогичному вопросу.

Ваш UIScrollView подкласс будет выглядеть примерно так:

#import "AppScrollView.h" 

@implementation AppScrollView 

- (id)initWithFrame:(CGRect)frame 
{ 
    return [super initWithFrame:frame]; 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    NSLog(@"AppScrollView touchesEnded:withEvent:"); 

    // If not dragging, send event to next responder 
    if (!self.dragging) 
     [[self.nextResponder nextResponder] touchesEnded:touches withEvent:event]; 
    else 
     [super touchesEnded: touches withEvent: event]; 

} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    NSLog(@"AppScrollView touchesMoved:withEvent:"); 

    [[self.nextResponder nextResponder] touchesMoved:touches withEvent:event]; 
} 

@end 

И ваш класс, включающий в AppScrollView объект должен принять протокол UIScrollViewDelegate и реализации этих методов:

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    NSLog(@"SomeClass touchesMoved:withEvent:"); 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    NSLog(@"SomeClass touchesEnded:withEvent:"); 
} 

Затем вошедшего выход будет выглядят следующим образом:

2013-06-11 10:45:21.625 Test[54090:c07] AppScrollView touchesMoved:withEvent: 
2013-06-11 10:45:21.625 Test[54090:c07] SomeClass touchesMoved:withEvent: 
2013-06-11 10:45:21.642 Test[54090:c07] AppScrollView touchesMoved:withEvent: 
2013-06-11 10:45:21.642 Test[54090:c07] SomeClass touchesMoved:withEvent: 
2013-06-11 10:45:21.655 Test[54090:c07] AppScrollView touchesEnded:withEvent: 
2013-06-11 10:45:21.656 Test[54090:c07] SomeClass touchesEnded:withEvent: 
+0

Большое спасибо за ответ ... Я дам ему попробовать после работы сегодня и отчитаться! – jake9115

+0

Хммммм. Оно работает. Хотя с одним вызовом nextResponder это не сработало. Любая идея, почему это так? – UrK

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