2013-09-14 2 views
0

Я пробовал в течение нескольких дней понимать подклассы и категории Xcode - и в конце концов я обнаружил одно событие, которое уволено.Событие триггера подкласса UIScrollView

- (void)setContentOffset:(CGPoint)contentOffset { 
    NSLog(@"foo"); 
} 

И больше путаницы, после чтения Apple iOS Documentation я получаю этот материал:

- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated { 
    NSLog(@"bar"); 
} 

Первое событие увольняют, но от компании Apple документации нет. Зачем?!

Но в первом случае, хотя он был уволен, UIScrollView теряет свое поведение прокрутки/перетаскивания. Я думаю, это потому, что после переопределения setContentOffset мне нужно было бы вызвать родительский метод, чтобы сохранить поведение UIScrollView по умолчанию. Но я уже устал от тестов устаревших подходов Xcode.

Чем второй код не уволен и как вызывается метод родительского переопределения?

Заранее спасибо.

+0

Что вы на самом деле пытаетесь сделать? Подкласс просмотра прокрутки вряд ли будет подходом, который вы должны предпринять. – Wain

+0

@Wain Я пытаюсь понять Pull Refresh. Это для целей знаний ... Но в принципе я могу создать это поведение с нуля. –

+0

Что вы хотите понять об этом? Если вы хотите реализовать pull для обновления вручную, вы все равно должны использовать делегат прокрутки «scrollViewDidScroll» (или наблюдать «contentOffset») и 'contentInset'. – Wain

ответ

1

Для вызова супер (: родительское) здесь

- (void)setContentOffset:(CGPoint)contentOffset { 
    NSLog(@"foo New Offset x: %.0f y: %.0f", contentOffset.x, contentOffset.y); 
    [super setContentOffset:contentOffset]; 
} 

И для второго; Это не метод делегата (: event), это метод, предоставляемый разработчику на самом деле, чтобы инициировать прокрутку к определенному смещению с/без анимации. Вам, вероятно, не нужно переопределять это.

- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated; 

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

Если вы хотите получать реальные события на scrollView, вам необходимо настроить делегат, как описано здесь; https://developer.apple.com/library/ios/documentation/uikit/reference/UIScrollViewDelegate_Protocol/Reference/UIScrollViewDelegate.html#//apple_ref/occ/intf/UIScrollViewDelegate

И я также согласен с Wain на обмен этой ссылке, https://developer.apple.com/library/ios/documentation/general/conceptual/DevPedia-CocoaCore/Delegation.html

+0

Как я уже говорил, я очень благодарен за помощь, оказанную от @Wain, и теперь ваш ответ подходит как перчатка. После того, как я прочитал и внедрил делегата в свой CustomClass, все работает как шарм - я был без стартовой точки и действительно не знал, с чего начать. Спасибо. –

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