Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Adding UIRefreshControl+AFNetworking

  • Loading branch information...
commit 0be5c74963796c76c6cb7aff8698727598b71744 1 parent 259c736
@mattt mattt authored
View
6 AFNetworking.xcworkspace/contents.xcworkspacedata
@@ -130,6 +130,12 @@
<FileRef
location = "group:UIWebView+AFNetworking.m">
</FileRef>
+ <FileRef
+ location = "group:UIRefreshControl+AFNetworking.h">
+ </FileRef>
+ <FileRef
+ location = "group:UIRefreshControl+AFNetworking.m">
+ </FileRef>
</Group>
<FileRef
location = "group:Tests/AFNetworking Tests.xcodeproj">
View
6 Example/AFNetworking iOS Example.xcodeproj/project.pbxproj
@@ -11,6 +11,7 @@
2982AD3217107C0000FFF048 /* adn.cer in Resources */ = {isa = PBXBuildFile; fileRef = 2982AD3117107C0000FFF048 /* adn.cer */; };
F8129C7415910C37009BFE23 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = F8129C7215910C37009BFE23 /* AppDelegate.m */; };
F818101615E6A0C600EF93C2 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 50ABD6EC159FC2CE001BE42C /* MobileCoreServices.framework */; };
+ F8664A2018AA99F5007D8554 /* UIRefreshControl+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = F8664A1F18AA99F5007D8554 /* UIRefreshControl+AFNetworking.m */; };
F86A37E0177397D900407E52 /* AFURLSessionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F86A37DF177397D900407E52 /* AFURLSessionManager.m */; };
F88812F016C533D6003C8B8C /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8E469E013957DF100DB05C8 /* Security.framework */; };
F8A847C1161F51A300940F39 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F8A847C0161F51A300940F39 /* Default-568h@2x.png */; };
@@ -56,6 +57,8 @@
F8129C3815910830009BFE23 /* Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Prefix.pch; sourceTree = SOURCE_ROOT; };
F8129C7215910C37009BFE23 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = SOURCE_ROOT; };
F8129C7315910C37009BFE23 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = SOURCE_ROOT; };
+ F8664A1E18AA99F5007D8554 /* UIRefreshControl+AFNetworking.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIRefreshControl+AFNetworking.h"; sourceTree = "<group>"; };
+ F8664A1F18AA99F5007D8554 /* UIRefreshControl+AFNetworking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIRefreshControl+AFNetworking.m"; sourceTree = "<group>"; };
F86A37DE177397D900407E52 /* AFURLSessionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AFURLSessionManager.h; sourceTree = "<group>"; };
F86A37DF177397D900407E52 /* AFURLSessionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AFURLSessionManager.m; sourceTree = "<group>"; };
F8A847C0161F51A300940F39 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = "<group>"; };
@@ -234,6 +237,8 @@
F8E02CF2177A8B710087BB23 /* UIImageView+AFNetworking.m */,
F8E02CF3177A8B710087BB23 /* UIProgressView+AFNetworking.h */,
F8E02CF4177A8B710087BB23 /* UIProgressView+AFNetworking.m */,
+ F8664A1E18AA99F5007D8554 /* UIRefreshControl+AFNetworking.h */,
+ F8664A1F18AA99F5007D8554 /* UIRefreshControl+AFNetworking.m */,
F8E02CF5177A8B710087BB23 /* UIWebView+AFNetworking.h */,
F8E02CF6177A8B710087BB23 /* UIWebView+AFNetworking.m */,
);
@@ -430,6 +435,7 @@
files = (
F86A37E0177397D900407E52 /* AFURLSessionManager.m in Sources */,
F8DA09E41396AC040057D0CC /* main.m in Sources */,
+ F8664A2018AA99F5007D8554 /* UIRefreshControl+AFNetworking.m in Sources */,
F8B3944D17DBF9B900430F25 /* AFHTTPRequestOperationManager.m in Sources */,
F8CBED2317D595320088ADC0 /* UIAlertView+AFNetworking.m in Sources */,
F8FA9491150EF8C100ED4EAD /* AFAppDotNetAPIClient.m in Sources */,
View
64 UIKit+AFNetworking/UIRefreshControl+AFNetworking.h
@@ -0,0 +1,64 @@
+// UIRefreshControl+AFNetworking.m
+//
+// Copyright (c) 2014 AFNetworking (http://afnetworking.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#import <Foundation/Foundation.h>
+
+#import <Availability.h>
+
+#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED)
+
+#import <UIKit/UIKit.h>
+
+@class AFURLConnectionOperation;
+
+/**
+ This category adds methods to the UIKit framework's `UIRefreshControl` class. The methods in this category provide support for automatically begining and ending refreshing depending on the loading state of a request operation or session task.
+ */
+@interface UIRefreshControl (AFNetworking)
+
+///-----------------------------------
+/// @name Refreshing for Session Tasks
+///-----------------------------------
+
+/**
+ Binds the refreshing state to the state of the specified task.
+
+ @param task The task. If `nil`, automatic updating from any previously specified operation will be diabled.
+ */
+#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000
+- (void)setRefreshingWithStateOfTask:(NSURLSessionTask *)task;
+#endif
+
+///----------------------------------------
+/// @name Refreshing for Request Operations
+///----------------------------------------
+
+/**
+ Binds the refreshing state to the execution state of the specified operation.
+
+ @param operation The operation. If `nil`, automatic updating from any previously specified operation will be disabled.
+ */
+- (void)setRefreshingWithStateOfOperation:(AFURLConnectionOperation *)operation;
+
+@end
+
+#endif
View
95 UIKit+AFNetworking/UIRefreshControl+AFNetworking.m
@@ -0,0 +1,95 @@
+// UIRefreshControl+AFNetworking.m
+//
+// Copyright (c) 2014 AFNetworking (http://afnetworking.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+#import "UIRefreshControl+AFNetworking.h"
+
+#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED)
+
+#import "AFHTTPRequestOperation.h"
+
+#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000
+#import "AFURLSessionManager.h"
+#endif
+
+@implementation UIRefreshControl (AFNetworking)
+
+#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000
+- (void)setRefreshingWithStateOfTask:(NSURLSessionTask *)task {
+ NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
+
+ [notificationCenter removeObserver:self name:AFNetworkingTaskDidResumeNotification object:nil];
+ [notificationCenter removeObserver:self name:AFNetworkingTaskDidSuspendNotification object:nil];
+ [notificationCenter removeObserver:self name:AFNetworkingTaskDidCompleteNotification object:nil];
+
+ if (task) {
+ if (task.state != NSURLSessionTaskStateCompleted) {
+ if (task.state == NSURLSessionTaskStateRunning) {
+ [self beginRefreshing];
+ } else {
+ [self endRefreshing];
+ }
+
+ [notificationCenter addObserver:self selector:@selector(af_beginRefreshing) name:AFNetworkingTaskDidResumeNotification object:task];
+ [notificationCenter addObserver:self selector:@selector(af_endRefreshing) name:AFNetworkingTaskDidCompleteNotification object:task];
+ [notificationCenter addObserver:self selector:@selector(af_endRefreshing) name:AFNetworkingTaskDidSuspendNotification object:task];
+ }
+ }
+}
+#endif
+
+- (void)setRefreshingWithStateOfOperation:(AFURLConnectionOperation *)operation {
+ NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];
+
+ [notificationCenter removeObserver:self name:AFNetworkingOperationDidStartNotification object:nil];
+ [notificationCenter removeObserver:self name:AFNetworkingOperationDidFinishNotification object:nil];
+
+ if (operation) {
+ if (![operation isFinished]) {
+ if ([operation isExecuting]) {
+ [self beginRefreshing];
+ } else {
+ [self endRefreshing];
+ }
+
+ [notificationCenter addObserver:self selector:@selector(af_beginRefreshing) name:AFNetworkingOperationDidStartNotification object:operation];
+ [notificationCenter addObserver:self selector:@selector(af_endRefreshing) name:AFNetworkingOperationDidFinishNotification object:operation];
+ }
+ }
+}
+
+#pragma mark -
+
+- (void)af_beginRefreshing {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ [self beginRefreshing];
+ });
+}
+
+- (void)af_endRefreshing {
+ dispatch_async(dispatch_get_main_queue(), ^{
+ [self endRefreshing];
+ });
+}
+
+@end
+
+#endif

1 comment on commit 0be5c74

@liuzhongyang

good job

Please sign in to comment.
Something went wrong with that request. Please try again.