Skip to content
This repository was archived by the owner on Jul 1, 2020. It is now read-only.

Commit 538d569

Browse files
Make footer,left,right customable
1 parent e9705e4 commit 538d569

12 files changed

Lines changed: 153 additions & 29 deletions

PullToRefreshKit.xcodeproj/project.pbxproj

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
/* Begin PBXBuildFile section */
1010
52261F0B1D36730F00161ADF /* DefaultCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52261F0A1D36730F00161ADF /* DefaultCollectionViewController.swift */; };
11-
52261F0D1D36832600161ADF /* ConfigDefaultHeaderFooterController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52261F0C1D36832600161ADF /* ConfigDefaultHeaderFooterController.swift */; };
11+
52261F0D1D36832600161ADF /* ConfigHeaderFooterController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52261F0C1D36832600161ADF /* ConfigHeaderFooterController.swift */; };
1212
52261F101D36878A00161ADF /* banner1.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 52261F0E1D36878A00161ADF /* banner1.jpg */; };
1313
52261F111D36878A00161ADF /* banner2.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 52261F0F1D36878A00161ADF /* banner2.jpg */; };
1414
52261F131D36879C00161ADF /* DefaultBannerController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52261F121D36879C00161ADF /* DefaultBannerController.swift */; };
@@ -27,6 +27,7 @@
2727
52BB292E1D364C6D0091F36B /* RowModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52BB292D1D364C6D0091F36B /* RowModel.swift */; };
2828
52BB29321D364E490091F36B /* DefaultTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52BB29311D364E490091F36B /* DefaultTableViewController.swift */; };
2929
52BB29341D3655B90091F36B /* Util.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52BB29331D3655B90091F36B /* Util.swift */; };
30+
52C0E4881D3726EB00618231 /* ConfigBannerController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52C0E4871D3726EB00618231 /* ConfigBannerController.swift */; };
3031
52E8FB401D336E26000D0BF1 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52E8FB3F1D336E26000D0BF1 /* AppDelegate.swift */; };
3132
52E8FB421D336E26000D0BF1 /* MainViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52E8FB411D336E26000D0BF1 /* MainViewController.swift */; };
3233
52E8FB451D336E26000D0BF1 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 52E8FB431D336E26000D0BF1 /* Main.storyboard */; };
@@ -36,7 +37,7 @@
3637

3738
/* Begin PBXFileReference section */
3839
52261F0A1D36730F00161ADF /* DefaultCollectionViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DefaultCollectionViewController.swift; sourceTree = "<group>"; };
39-
52261F0C1D36832600161ADF /* ConfigDefaultHeaderFooterController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConfigDefaultHeaderFooterController.swift; sourceTree = "<group>"; };
40+
52261F0C1D36832600161ADF /* ConfigHeaderFooterController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConfigHeaderFooterController.swift; sourceTree = "<group>"; };
4041
52261F0E1D36878A00161ADF /* banner1.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = banner1.jpg; sourceTree = "<group>"; };
4142
52261F0F1D36878A00161ADF /* banner2.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = banner2.jpg; sourceTree = "<group>"; };
4243
52261F121D36879C00161ADF /* DefaultBannerController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DefaultBannerController.swift; sourceTree = "<group>"; };
@@ -56,6 +57,7 @@
5657
52BB292D1D364C6D0091F36B /* RowModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RowModel.swift; sourceTree = "<group>"; };
5758
52BB29311D364E490091F36B /* DefaultTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DefaultTableViewController.swift; sourceTree = "<group>"; };
5859
52BB29331D3655B90091F36B /* Util.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Util.swift; sourceTree = "<group>"; };
60+
52C0E4871D3726EB00618231 /* ConfigBannerController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConfigBannerController.swift; sourceTree = "<group>"; };
5961
52E8FB3C1D336E26000D0BF1 /* PullToRefreshKit.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PullToRefreshKit.app; sourceTree = BUILT_PRODUCTS_DIR; };
6062
52E8FB3F1D336E26000D0BF1 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
6163
52E8FB411D336E26000D0BF1 /* MainViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainViewController.swift; sourceTree = "<group>"; };
@@ -117,8 +119,9 @@
117119
children = (
118120
52BB29311D364E490091F36B /* DefaultTableViewController.swift */,
119121
52261F0A1D36730F00161ADF /* DefaultCollectionViewController.swift */,
120-
52261F0C1D36832600161ADF /* ConfigDefaultHeaderFooterController.swift */,
121122
52261F121D36879C00161ADF /* DefaultBannerController.swift */,
123+
52261F0C1D36832600161ADF /* ConfigHeaderFooterController.swift */,
124+
52C0E4871D3726EB00618231 /* ConfigBannerController.swift */,
122125
);
123126
name = Default;
124127
sourceTree = "<group>";
@@ -262,7 +265,8 @@
262265
52E8FB401D336E26000D0BF1 /* AppDelegate.swift in Sources */,
263266
52BB29341D3655B90091F36B /* Util.swift in Sources */,
264267
52261F0B1D36730F00161ADF /* DefaultCollectionViewController.swift in Sources */,
265-
52261F0D1D36832600161ADF /* ConfigDefaultHeaderFooterController.swift in Sources */,
268+
52261F0D1D36832600161ADF /* ConfigHeaderFooterController.swift in Sources */,
269+
52C0E4881D3726EB00618231 /* ConfigBannerController.swift in Sources */,
266270
52BB291C1D3639500091F36B /* Header.swift in Sources */,
267271
52BB29321D364E490091F36B /* DefaultTableViewController.swift in Sources */,
268272
52BB292E1D364C6D0091F36B /* RowModel.swift in Sources */,
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
//
2+
// ConfigDefaultBannerController.swift
3+
// PullToRefreshKit
4+
//
5+
// Created by huangwenchen on 16/7/14.
6+
// Copyright © 2016年 Leo. All rights reserved.
7+
//
8+
9+
import Foundation
10+
import UIKit
11+
12+
class ConfigBannerController: UIViewController {
13+
let scrollView = UIScrollView()
14+
override func viewDidLoad() {
15+
super.viewDidLoad()
16+
self.navigationItem.title = "Banners"
17+
self.automaticallyAdjustsScrollViewInsets = false
18+
setUpViews()
19+
20+
scrollView.setUpLeftRefresh { [weak self] in
21+
self?.navigationController?.popViewControllerAnimated(true)
22+
}.SetUp { (left) in
23+
left.setText("👉滑动关闭", mode: RefreshKitLeftRightText.scrollToAction)
24+
left.setText("松开关闭", mode: RefreshKitLeftRightText.releaseToAction)
25+
left.textLabel.textColor = UIColor.orangeColor()
26+
}
27+
scrollView.setUpRightRefresh { [weak self] in
28+
self?.navigationController?.popViewControllerAnimated(true)
29+
}.SetUp { (right) in
30+
right.setText("👈滑动关闭", mode: RefreshKitLeftRightText.scrollToAction)
31+
right.setText("松开关闭", mode: RefreshKitLeftRightText.releaseToAction)
32+
right.textLabel.textColor = UIColor.orangeColor()
33+
}
34+
}
35+
36+
func setUpViews(){
37+
view.backgroundColor = UIColor.whiteColor()
38+
let screenWidth = UIScreen.mainScreen().bounds.size.width;
39+
let scrollheight = screenWidth / 8.0 * 5.0
40+
scrollView.frame = CGRectMake(0, 0, screenWidth, scrollheight)
41+
scrollView.center = self.view.center
42+
self.view.addSubview(scrollView)
43+
let imageView1 = UIImageView(frame:CGRectMake(0, 0, screenWidth, scrollheight))
44+
imageView1.image = UIImage(named: "banner1.jpg")
45+
scrollView.addSubview(imageView1)
46+
47+
let imageView2 = UIImageView(frame:CGRectMake(screenWidth, 0, screenWidth, scrollheight))
48+
imageView2.image = UIImage(named: "banner2.jpg")
49+
scrollView.addSubview(imageView2)
50+
51+
scrollView.pagingEnabled = true
52+
scrollView.contentSize = CGSizeMake(screenWidth * 2, scrollheight)
53+
let desLabel = UILabel().SetUp { (label) in
54+
label.frame = CGRectMake(0, 0, screenWidth, 40)
55+
label.font = UIFont.systemFontOfSize(14)
56+
label.center = CGPointMake(scrollView.center.x, scrollView.center.y - CGRectGetWidth(scrollView.frame)/2 - 20)
57+
label.text = "向左或者向右滑动Banner"
58+
label.textAlignment = .Center
59+
}
60+
view.addSubview(desLabel)
61+
}
62+
}

PullToRefreshKit/ConfigDefaultHeaderFooterController.swift renamed to PullToRefreshKit/ConfigHeaderFooterController.swift

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@ class ConfigDefaultHeaderFooterController: UITableViewController {
2525
}.SetUp { (header) in
2626
header.setText("Pull to refresh", mode: .pullToRefresh)
2727
header.setText("Release to refresh", mode: .releaseToRefresh)
28-
header.setText("Refresh successfully", mode: .refreshSuccess)
28+
header.setText("Success", mode: .refreshSuccess)
2929
header.setText("Refreshing...", mode: .refreshing)
30-
header.setText("Refresh failed", mode: .refreshFailure)
31-
header.setText("Refresh error", mode: .refreshError)
30+
header.setText("Failed", mode: .refreshFailure)
31+
header.setText("Error", mode: .refreshError)
3232
header.textLabel.textColor = UIColor.orangeColor()
3333
header.imageView.image = nil
3434
}
@@ -41,7 +41,10 @@ class ConfigDefaultHeaderFooterController: UITableViewController {
4141
self?.tableView.endFooterRefreshing()
4242
})
4343
}.SetUp { (footer) in
44-
44+
footer.setText("Pull up to refresh", mode: RefreshKitFooterText.pullToRefresh)
45+
footer.setText("No data any more", mode: RefreshKitFooterText.noMoreData)
46+
footer.setText("Refreshing...", mode: RefreshKitFooterText.refreshing)
47+
footer.textLabel.textColor = UIColor.orangeColor()
4548
}
4649
}
4750
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

PullToRefreshKit/Const.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ struct PullToRefreshKitHeaderString{
3939
}
4040

4141
struct PullToRefreshKitFooterString{
42-
static let upToRefresh = "上拉加载更多数据"
42+
static let pullToRefresh = "上拉加载更多数据"
4343
static let refreshing = "正在加载中..."
4444
static let noMoreData = "数据加载完毕"
4545
}

PullToRefreshKit/DefaultBannerController.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,5 +41,13 @@ class DefaultBannerController: UIViewController {
4141

4242
scrollView.pagingEnabled = true
4343
scrollView.contentSize = CGSizeMake(screenWidth * 2, scrollheight)
44+
let desLabel = UILabel().SetUp { (label) in
45+
label.frame = CGRectMake(0, 0, screenWidth, 40)
46+
label.font = UIFont.systemFontOfSize(14)
47+
label.center = CGPointMake(scrollView.center.x, scrollView.center.y - CGRectGetWidth(scrollView.frame)/2 - 20)
48+
label.text = "向左或者向右滑动Banner"
49+
label.textAlignment = .Center
50+
}
51+
view.addSubview(desLabel)
4452
}
4553
}

PullToRefreshKit/DefaultTableViewController.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import Foundation
1010
import UIKit
1111
class DefaultTableViewController:UITableViewController{
1212
var models = [1,2,3,4,5,6,7,8,9,10]
13-
1413
override func viewDidLoad() {
1514
super.viewDidLoad()
1615
self.tableView.tableFooterView = UIView(frame: CGRectZero)
@@ -28,6 +27,7 @@ class DefaultTableViewController:UITableViewController{
2827
self?.tableView.endFooterRefreshing()
2928
})
3029
}
30+
self.tableView.beginHeaderRefreshing()
3131
}
3232
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
3333
return models.count

PullToRefreshKit/Footer.swift

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,35 @@
99
import Foundation
1010
import UIKit
1111

12+
enum RefreshKitFooterText{
13+
case pullToRefresh
14+
case refreshing
15+
case noMoreData
16+
}
1217
class DefaultRefreshFooter:UIView,RefreshableFooter{
1318
let spinner:UIActivityIndicatorView = UIActivityIndicatorView(activityIndicatorStyle: .Gray)
14-
let textLabel:UILabel = UILabel(frame: CGRectMake(0,0,100,40)).SetUp {
19+
let textLabel:UILabel = UILabel(frame: CGRectMake(0,0,120,40)).SetUp {
1520
$0.font = UIFont.systemFontOfSize(14)
1621
$0.textAlignment = .Center
17-
$0.text = PullToRefreshKitFooterString.upToRefresh
22+
}
23+
private var textDic = [RefreshKitFooterText:String]()
24+
/**
25+
This function can only be called before refreshing
26+
*/
27+
func setText(text:String,mode:RefreshKitFooterText){
28+
textDic[mode] = text
29+
textLabel.text = textDic[.pullToRefresh]
1830
}
1931
override init(frame: CGRect) {
2032
super.init(frame: frame)
2133
addSubview(spinner)
2234
addSubview(textLabel)
2335
textLabel.center = CGPointMake(frame.size.width/2, frame.size.height/2);
24-
spinner.center = CGPointMake(frame.width/2 - 50 - 20, frame.size.height/2)
36+
spinner.center = CGPointMake(frame.width/2 - 60 - 20, frame.size.height/2)
37+
textDic[.pullToRefresh] = PullToRefreshKitFooterString.pullToRefresh
38+
textDic[.refreshing] = PullToRefreshKitFooterString.refreshing
39+
textDic[.noMoreData] = PullToRefreshKitFooterString.noMoreData
40+
textLabel.text = textDic[.pullToRefresh]
2541
}
2642
required init?(coder aDecoder: NSCoder) {
2743
fatalError("init(coder:) has not been implemented")
@@ -31,18 +47,18 @@ class DefaultRefreshFooter:UIView,RefreshableFooter{
3147
return PullToRefreshKitConst.defaultFooterHeight
3248
}
3349
func didBeginRefreshing() {
34-
textLabel.text = PullToRefreshKitFooterString.refreshing;
50+
textLabel.text = textDic[.refreshing];
3551
spinner.startAnimating()
3652
}
3753
func didEndRefreshing() {
38-
textLabel.text = PullToRefreshKitFooterString.upToRefresh
54+
textLabel.text = textDic[.pullToRefresh]
3955
spinner.stopAnimating()
4056
}
4157
func didUpdateToNoMoreData(){
42-
textLabel.text = PullToRefreshKitFooterString.noMoreData
58+
textLabel.text = textDic[.noMoreData]
4359
}
4460
func didResetToDefault() {
45-
textLabel.text = PullToRefreshKitFooterString.upToRefresh
61+
textLabel.text = textDic[.pullToRefresh]
4662
}
4763
}
4864
class RefreshFooterContainer:UIView{

PullToRefreshKit/Header.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ class DefaultRefreshHeader:UIView,RefreshableHeader{
100100
self.hidden = true
101101
}
102102
func willBeginRefreshing() {
103+
self.hidden = false
103104
textLabel.text = textDic[.refreshing]
104105
spinner.startAnimating()
105106
imageView.hidden = true
@@ -124,7 +125,7 @@ class RefreshHeaderContainer:UIView{
124125
private var currentResult:RefreshResult = .None
125126
private var _state:RefreshHeaderState = .Idle
126127
private var insetTDelta:CGFloat = 0.0
127-
var state:RefreshHeaderState{
128+
private var state:RefreshHeaderState{
128129
get{
129130
return _state
130131
}

PullToRefreshKit/Left.swift

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,27 @@
99
import Foundation
1010
import UIKit
1111

12+
enum RefreshKitLeftRightText{
13+
case scrollToAction
14+
case releaseToAction
15+
}
1216
class DefaultRefreshLeft:UIView,RefreshableLeftRight{
1317
let imageView:UIImageView = UIImageView().SetUp {
1418
$0.image = UIImage(named: "arrow_right")
1519
}
1620
let textLabel:UILabel = UILabel().SetUp {
1721
$0.font = UIFont.systemFontOfSize(14)
18-
$0.text = PullToRefreshKitLeftString.scrollToAction
1922
}
23+
private var textDic = [RefreshKitLeftRightText:String]()
24+
25+
/**
26+
You can only call this function before pull
27+
*/
28+
func setText(text:String,mode:RefreshKitLeftRightText){
29+
textDic[mode] = text
30+
textLabel.text = textDic[.scrollToAction]
31+
}
32+
2033
override init(frame: CGRect) {
2134
super.init(frame: frame)
2235
addSubview(imageView)
@@ -26,6 +39,9 @@ class DefaultRefreshLeft:UIView,RefreshableLeftRight{
2639
textLabel.numberOfLines = 0
2740
imageView.frame = CGRectMake(0, 0,20, 20)
2841
imageView.center = CGPointMake(40,frame.size.height/2)
42+
textDic[.scrollToAction] = PullToRefreshKitLeftString.scrollToAction
43+
textDic[.releaseToAction] = PullToRefreshKitLeftString.releaseToAction
44+
textLabel.text = textDic[.scrollToAction]
2945
}
3046
required init?(coder aDecoder: NSCoder) {
3147
fatalError("init(coder:) has not been implemented")
@@ -43,13 +59,13 @@ class DefaultRefreshLeft:UIView,RefreshableLeftRight{
4359
UIView.animateWithDuration(0.4, animations: {
4460
self.imageView.transform = CGAffineTransformMakeRotation(CGFloat(-M_PI+0.000001))
4561
})
46-
textLabel.text = PullToRefreshKitLeftString.releaseToAction
62+
textLabel.text = textDic[.releaseToAction]
4763
}
4864
if percent <= 1.0{
4965
guard CGAffineTransformEqualToTransform(self.imageView.transform, CGAffineTransformMakeRotation(CGFloat(-M_PI+0.000001))) else{
5066
return
5167
}
52-
textLabel.text = PullToRefreshKitLeftString.scrollToAction
68+
textLabel.text = textDic[.scrollToAction]
5369
UIView.animateWithDuration(0.4, animations: {
5470
self.imageView.transform = CGAffineTransformIdentity
5571
})
@@ -59,7 +75,7 @@ class DefaultRefreshLeft:UIView,RefreshableLeftRight{
5975

6076
}
6177
func didEndRefreshing() {
62-
textLabel.text = PullToRefreshKitLeftString.scrollToAction
78+
textLabel.text = textDic[.scrollToAction]
6379
}
6480
}
6581

PullToRefreshKit/MainViewController.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class MainViewController: UITableViewController {
1919
let section1 = SectionModel(rowsCount: 2,
2020
sectionTitle:"属性配置",
2121
rowsTitles: ["配置Header/Footer属性","配置Left/Right属性"],
22-
rowsTargetControlerNames:["ConfigDefaultHeaderFooterController","DefaultFooterController"])
22+
rowsTargetControlerNames:["ConfigDefaultHeaderFooterController","ConfigBannerController"])
2323
let section2 = SectionModel(rowsCount: 4,
2424
sectionTitle:"自定义",
2525
rowsTitles: ["自定义header","自定义Footer","自定义left","自定义Right"],

0 commit comments

Comments
 (0)