123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- //
- // RATableView.m
- // Pods
- //
- // Created by Rafal Augustyniak on 15/11/15.
- //
- //
- #import "RATableView.h"
- #import <objc/runtime.h>
- @interface RATableView () <UITableViewDelegate>
- @end
- @implementation RATableView
- - (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style
- {
- self = [super initWithFrame:frame style:style];
- if (self) {
- [self commonInit];
- }
- return self;
- }
- - (instancetype)initWithCoder:(NSCoder *)aDecoder
- {
- self = [super initWithCoder:aDecoder];
- if (self) {
- [self commonInit];
- }
- return self;
- }
- - (void)commonInit
- {
- [super setDelegate:self];
- }
- - (void)setTableViewDelegate:(id<UITableViewDelegate>)tableViewDelegate
- {
- if (_tableViewDelegate == tableViewDelegate) {
- return;
- }
- [super setDelegate:nil];
- _tableViewDelegate = tableViewDelegate;
- [super setDelegate:self];
- }
- - (void)setDelegate:(id<UITableViewDelegate>)delegate
- {
- if (self.scrollViewDelegate == delegate) {
- return;
- }
- [super setDelegate:nil];
- self.scrollViewDelegate = delegate;
- [super setDelegate:self];
- }
- - (BOOL)respondsToSelector:(SEL)aSelector
- {
- return [super respondsToSelector:aSelector]
- || (SelectorBelongsToProtocol(@protocol(UIScrollViewDelegate), aSelector) && [self.scrollViewDelegate respondsToSelector:aSelector])
- || (SelectorBelongsToProtocol(@protocol(UITableViewDelegate), aSelector) && [self.tableViewDelegate respondsToSelector:aSelector]);
- }
- - (id)forwardingTargetForSelector:(SEL)aSelector
- {
- if (SelectorBelongsToProtocol(@protocol(UIScrollViewDelegate), aSelector)) {
- return self.scrollViewDelegate;
- } else if (SelectorBelongsToProtocol(@protocol(UITableViewDelegate), aSelector)) {
- return self.tableViewDelegate;
- } else {
- return nil;
- }
- }
- #pragma mark - ScrollView delegate
- - (void)scrollViewDidScroll:(UIScrollView *)scrollView
- {
- if ([self.scrollViewDelegate respondsToSelector:@selector(scrollViewDidScroll:)]) {
- [self.scrollViewDelegate scrollViewDidScroll:scrollView];
- }
- }
- - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
- {
- if ([self.scrollViewDelegate respondsToSelector:@selector(scrollViewWillBeginDragging:)]) {
- [self.scrollViewDelegate scrollViewWillBeginDragging:scrollView];
- }
- }
- - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
- {
- if ([self.scrollViewDelegate respondsToSelector:@selector(scrollViewWillEndDragging:withVelocity:targetContentOffset:)]) {
- [self.scrollViewDelegate scrollViewWillEndDragging:scrollView withVelocity:velocity targetContentOffset:targetContentOffset];
- }
- }
- - (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView
- {
- if ([self.scrollViewDelegate respondsToSelector:@selector(scrollViewShouldScrollToTop:)]) {
- return [self.scrollViewDelegate scrollViewShouldScrollToTop:scrollView];
- }
- return YES;
- }
- - (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView
- {
- if ([self.scrollViewDelegate respondsToSelector:@selector(scrollViewDidScroll:)]) {
- [self.scrollViewDelegate scrollViewDidScroll:scrollView];
- }
- }
- - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
- {
- if ([self.scrollViewDelegate respondsToSelector:@selector(scrollViewWillBeginDecelerating:)]) {
- [self.scrollViewDelegate scrollViewWillBeginDecelerating:scrollView];
- }
- }
- - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
- {
- if ([self.scrollViewDelegate respondsToSelector:@selector(scrollViewDidEndDecelerating:)]) {
- [self.scrollViewDelegate scrollViewDidEndDecelerating:scrollView];
- }
- }
- - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
- {
- if ([self.scrollViewDelegate respondsToSelector:@selector(viewForZoomingInScrollView:)]) {
- return [self.scrollViewDelegate viewForZoomingInScrollView:scrollView];
- }
- return nil;
- }
- - (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view
- {
- if ([self.scrollViewDelegate respondsToSelector:@selector(scrollViewWillBeginZooming:withView:)]) {
- [self.scrollViewDelegate scrollViewWillBeginZooming:scrollView withView:view];
- }
- }
- - (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale
- {
- if ([self.scrollViewDelegate respondsToSelector:@selector(scrollViewDidEndZooming:withView:atScale:)]) {
- [self.scrollViewDelegate scrollViewDidEndZooming:scrollView withView:view atScale:scale];
- }
- }
- - (void)scrollViewDidZoom:(UIScrollView *)scrollView
- {
- if ([self.scrollViewDelegate respondsToSelector:@selector(scrollViewDidZoom:)]) {
- [self.scrollViewDelegate scrollViewDidZoom:scrollView];
- }
- }
- - (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
- {
- if ([self.scrollViewDelegate respondsToSelector:@selector(scrollViewDidEndScrollingAnimation:)]) {
- [self.scrollViewDelegate scrollViewDidEndScrollingAnimation:scrollView];
- }
- }
- #pragma mark -
- static BOOL SelectorBelongsToProtocol(Protocol *protocol, SEL selector)
- {
- struct objc_method_description methodDescription = protocol_getMethodDescription(protocol, selector, NO, YES);
- return NULL != methodDescription.name;
- }
- @end
|