Skip to content

Commit a79241b

Browse files
committed
Enable infitite scroll view and pull to refresh
1 parent 80e4151 commit a79241b

7 files changed

+64
-1
lines changed

Example/INSPullToRefresh/INSPullToRefreshViewController.m

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ - (void)viewDidLoad {
3333
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
3434
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
3535
[scrollView ins_endPullToRefresh];
36-
3736
});
3837
}];
3938

@@ -72,6 +71,11 @@ - (void)viewDidLoad {
7271
[weakSelf.tableView endUpdates];
7372

7473
[scrollView ins_endInfinityScroll];
74+
75+
if (weakSelf.numberOfRows > 30) {
76+
// Disable infinite scroll after 45 rows
77+
scrollView.ins_infiniteScrollBackgroundView.enabled = NO;
78+
}
7579
});
7680
}];
7781

INSPullToRefresh/INSInfiniteScrollBackgroundView.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ typedef NS_ENUM(NSUInteger, INSInfiniteScrollBackgroundViewState) {
4848
@property (nonatomic, readonly) INSInfiniteScrollBackgroundViewState state;
4949
@property (nonatomic, assign) BOOL preserveContentInset;
5050

51+
@property (nonatomic, assign) BOOL enabled;
52+
5153
@property (nonatomic, assign) CGFloat additionalBottomOffsetForInfinityScrollTrigger;
5254

5355
- (instancetype)initWithHeight:(CGFloat)height scrollView:(UIScrollView *)scrollView;

INSPullToRefresh/INSInfiniteScrollBackgroundView.m

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,19 @@ - (void)setPreserveContentInset:(BOOL)preserveContentInset {
4747
}
4848
}
4949

50+
- (void)setEnabled:(BOOL)enabled {
51+
if (_enabled != enabled) {
52+
_enabled = enabled;
53+
54+
if (_enabled) {
55+
[self resetFrame];
56+
} else {
57+
[self stopInfiniteScroll];
58+
}
59+
60+
self.hidden = !_enabled;
61+
}
62+
}
5063

5164
#pragma mark - Initializers
5265

@@ -66,6 +79,7 @@ - (instancetype)initWithHeight:(CGFloat)height scrollView:(UIScrollView *)scroll
6679
self.autoresizingMask = UIViewAutoresizingFlexibleWidth;
6780
_state = INSInfiniteScrollBackgroundViewStateNone;
6881
_preserveContentInset = NO;
82+
_enabled = YES;
6983
self.hidden = YES;
7084

7185
[self resetFrame];
@@ -77,6 +91,9 @@ - (instancetype)initWithHeight:(CGFloat)height scrollView:(UIScrollView *)scroll
7791
#pragma mark - Observing
7892

7993
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
94+
if (!self.enabled) {
95+
return;
96+
}
8097
if ([keyPath isEqualToString:@"contentOffset"]) {
8198
[self scrollViewDidScroll:[[change valueForKey:NSKeyValueChangeNewKey] CGPointValue]];
8299
}
@@ -119,6 +136,10 @@ - (void)scrollViewDidScroll:(CGPoint)contentOffset {
119136
#pragma mark - Public
120137

121138
- (void)beginInfiniteScrolling {
139+
if (!self.enabled) {
140+
return;
141+
}
142+
122143
if (self.state == INSInfiniteScrollBackgroundViewStateNone) {
123144
[self startInfiniteScroll];
124145
}

INSPullToRefresh/INSPullToRefreshBackgroundView.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ typedef NS_ENUM(NSUInteger, INSPullToRefreshBackgroundViewState) {
5959

6060
@property (nonatomic, assign) CGFloat dragToTriggerOffset;
6161

62+
@property (nonatomic, assign) BOOL enabled;
63+
6264
- (instancetype)initWithHeight:(CGFloat)height scrollView:(UIScrollView *)scrollView;
6365

6466
- (void)beginRefreshing;

INSPullToRefresh/INSPullToRefreshBackgroundView.m

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,18 @@ - (void)setPreserveContentInset:(BOOL)preserveContentInset {
109109
}
110110
}
111111

112+
- (void)setEnabled:(BOOL)enabled {
113+
if (_enabled != enabled) {
114+
_enabled = enabled;
115+
if (_enabled) {
116+
[self resetFrame];
117+
} else {
118+
[self endRefreshing];
119+
}
120+
self.hidden = !_enabled;
121+
}
122+
}
123+
112124
#pragma mark - Initializers
113125

114126
- (instancetype)initWithFrame:(CGRect)frame {
@@ -128,6 +140,7 @@ - (instancetype)initWithHeight:(CGFloat)height scrollView:(UIScrollView *)scroll
128140
_state = INSPullToRefreshBackgroundViewStateNone;
129141
_preserveContentInset = NO;
130142
_scrollToTopAfterEndRefreshing = YES;
143+
_enabled = YES;
131144

132145
[self resetFrame];
133146
}
@@ -138,6 +151,10 @@ - (instancetype)initWithHeight:(CGFloat)height scrollView:(UIScrollView *)scroll
138151
#pragma mark - Public
139152

140153
- (void)beginRefreshing {
154+
if (!self.enabled) {
155+
return;
156+
}
157+
141158
if (self.state == INSPullToRefreshBackgroundViewStateNone) {
142159
[self changeState:INSPullToRefreshBackgroundViewStateTriggered];
143160

@@ -173,6 +190,11 @@ - (void)changeState:(INSPullToRefreshBackgroundViewState)state {
173190
#pragma mark - Observing
174191

175192
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
193+
194+
if (!self.enabled) {
195+
return;
196+
}
197+
176198
if ([keyPath isEqualToString:@"contentOffset"]) {
177199
[self scrollViewDidScroll:[[change valueForKey:NSKeyValueChangeNewKey] CGPointValue]];
178200
}

INSPullToRefresh/UIScrollView+INSPullToRefresh.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@
3737
- (void)ins_addPullToRefreshWithHeight:(CGFloat)height handler:(INSPullToRefreshActionHandler)actionHandler;
3838
- (void)ins_removePullToRefresh;
3939

40+
- (void)ins_setPullToRefreshEnabled:(BOOL)enabled;
41+
4042
- (void)ins_beginPullToRefresh;
4143
- (void)ins_endPullToRefresh;
4244

@@ -45,6 +47,8 @@
4547
- (void)ins_addInfinityScrollWithHeight:(CGFloat)height handler:(INSInfinityScrollActionHandler)actionHandler;
4648
- (void)ins_removeInfinityScroll;
4749

50+
- (void)ins_setInfinityScrollEnabled:(BOOL)enabled;
51+
4852
- (void)ins_beginInfinityScroll;
4953
- (void)ins_endInfinityScroll;
5054

INSPullToRefresh/UIScrollView+INSPullToRefresh.m

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@ - (void)ins_endPullToRefresh {
6464
[self.ins_pullToRefreshBackgroundView endRefreshing];
6565
}
6666

67+
- (void)ins_setPullToRefreshEnabled:(BOOL)enabled {
68+
self.ins_pullToRefreshBackgroundView.enabled = enabled;
69+
}
70+
6771
- (void)ins_addPullToRefreshWithHeight:(CGFloat)height handler:(INSPullToRefreshActionHandler)actionHandler {
6872

6973
[self ins_removePullToRefresh];
@@ -112,6 +116,10 @@ - (void)ins_removeInfinityScroll {
112116
}
113117
}
114118

119+
- (void)ins_setInfinityScrollEnabled:(BOOL)enabled {
120+
self.ins_infiniteScrollBackgroundView.enabled = enabled;
121+
}
122+
115123
- (void)ins_beginInfinityScroll {
116124
[self.ins_infiniteScrollBackgroundView beginInfiniteScrolling];
117125
}

0 commit comments

Comments
 (0)