Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/AfrozZaheer/AZTableViewController

Elegant and easy way to integrate pagination with dummy views
https://github.com/AfrozZaheer/AZTableViewController

Last synced: about 1 month ago
JSON representation

Elegant and easy way to integrate pagination with dummy views

Awesome Lists containing this project

README

        

# AZTableView Controller

![Alt text](http://i.imgur.com/qUV86bJ.png "AZ-TableViewImage")

[![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/sindresorhus/awesome)
[![Swift version](https://img.shields.io/badge/swift-3.0-orange.svg?style=flat.svg)](https://img.shields.io/badge/swift-3.0-orange.svg?style=flat.svg)
[![Support Dependecy Manager](https://img.shields.io/badge/support-CocoaPods-red.svg?style=flat.svg)](https://img.shields.io/badge/support-CocoaPods-red.svg?style=flat.svg)
[![Version](https://img.shields.io/cocoapods/v/AZTableView.svg?style=flat)](https://cocoapods.org/pods/AZTableView)
[![License](https://img.shields.io/badge/License-MIT-brightgreen.svg?style=flat.svg)](https://img.shields.io/badge/License-MIT-brightgreen.svg?style=flat.svg)
[![Platform](https://img.shields.io/badge/platform-ios-lightgrey.svg)](https://cocoapods.org/pods/AZTableView)





## Features

* Automatic pagination handling
* No more awkward empty TableView screen
* AZ TableView controller give you advantage to connect your (Loading, no result, error ) views via Interface builder

## New in version 0.0.2

* You can now add your custom xib as dummy views (loading, error, no result)
* You can add xib based next page loading cell also

## Installation

### CocoaPods

[CocoaPods](http://cocoapods.org) is a dependency manager for Cocoa projects. You can install it with the following command:

```bash
$ gem install cocoapods
```

To integrate AZTableViewController into your Xcode project using CocoaPods, specify it in your `Podfile`:

```ruby
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '10.0'
use_frameworks!

target '' do
pod 'AZTableView'
end
```

Then, run the following command:

```bash
$ pod install
```

## Usage

#### Step 1

* Extend your view controller from AZTableVIewController
```swift

class ViewController: AZTableViewController {

var lastIndex = 0
var results = [String]()
override func viewDidLoad() {

super.viewDidLoad()
self.fetchData()
}

override func viewDidAppear(_ animated: Bool) {

}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}

```

#### Step 2

* Set the next page loading cell outlet as given below,

![Alt text](http://i.imgur.com/SWYNa2W.png "AZTableView-step2")

![Alt text](http://i.imgur.com/Zi9RKJ2.png "AZTableView-step2")

* To load views from custom .xib files

```swift

class ViewController: AZTableViewController {
override func viewDidLoad() {

self.loadLoadingView(nibName: "your nib name") // if bundle is nil
self.loadErrorView(nibName: "your nib name", bundle: yourBundle) // if custom bundle

super.viewDidLoad()
self.fetchData()
}
}
```
* If your xibs are in main bundle than use
```swift
self.loadLoadingView(nibName: "your nib name") // if bundle is nil
```
Else use
```swift
self.loadLoadingView(nibName: "your nib name", bundle: yourBundle)
```

#### Step 3

* Confirm your controller to UITableViewDelegate and UITableViewDataSource

* And override AZtabeView cellForRow function.

```swift
extension ViewController : UITableViewDataSource, UITableViewDelegate {

override func AZtableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

if let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")
{
cell.textLabel?.text = results[indexPath.row]
return cell
}
return UITableViewCell()
}

override func AZtableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return results.count
}
}

```
#### Step 4

* Override two more functions "fetchData" and "fetchNextData"

```swift
//MARK: - API Call
extension ViewController {

override func fetchData() {
super.fetchData()

FakeService.getData { (error, results) in

if let resu = results {
self.results.removeAll()
self.results.append(contentsOf: resu)
self.didfetchData(resultCount: resu.count, haveMoreData: true)
}

else if let error = error {
self.errorDidOccured(error: error)
}
}
}

override func fetchNextData() {
super.fetchNextData()

FakeService.getData (offset: results.count) { (error, results) in

if let resu = results {

self.results.append(contentsOf: resu)
if self.results.count < 45 { // you probably get next page exist from service.
self.didfetchData(resultCount: resu.count, haveMoreData: true)
}
else {
self.didfetchData(resultCount: resu.count, haveMoreData: false)
}
}
else if let error = error {
self.errorDidOccured(error: error)
}
}
}
}

```

#### Done
Thats it, you successfully integrate AZTableViewController

## License

AZTableView is available under the MIT license. See the LICENSE file for more info.

## Author

**Afroz Zaheer** - (https://github.com/AfrozZaheer)