This repository has been archived on 2024-07-22. You can view files and clone it, but cannot push or open issues or pull requests.
Doric/doric-iOS/Devkit/Classes/RATreeView/RATableView.m
2021-07-21 19:32:31 +08:00

184 lines
5.1 KiB
Objective-C

//
// 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