Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/tungvoduc/dtpagercontroller
A fully customizable container view controller to display a set of ViewControllers in a horizontal scroll view. Written in Swift.
https://github.com/tungvoduc/dtpagercontroller
cocoapods ios pager-controller swift swift-package-manager swift4 swift5 xcode
Last synced: about 1 month ago
JSON representation
A fully customizable container view controller to display a set of ViewControllers in a horizontal scroll view. Written in Swift.
- Host: GitHub
- URL: https://github.com/tungvoduc/dtpagercontroller
- Owner: tungvoduc
- License: mit
- Created: 2017-09-15T21:38:09.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2021-04-11T14:09:04.000Z (over 3 years ago)
- Last Synced: 2024-09-29T22:03:06.051Z (about 1 month ago)
- Topics: cocoapods, ios, pager-controller, swift, swift-package-manager, swift4, swift5, xcode
- Language: Swift
- Homepage:
- Size: 5.57 MB
- Stars: 289
- Watchers: 9
- Forks: 42
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# DTPagerController
[![Version](https://img.shields.io/cocoapods/v/DTPagerController.svg?style=flat)](http://cocoapods.org/pods/DTPagerController)
[![License](https://img.shields.io/cocoapods/l/DTPagerController.svg?style=flat)](http://cocoapods.org/pods/DTPagerController)
[![Platform](https://img.shields.io/cocoapods/p/DTPagerController.svg?style=flat)](http://cocoapods.org/pods/DTPagerController)This is a control for iOS written in Swift. DTPagerController is simple to use and easy to customize.
## Screenshots
**Default segmented control**
**Custom segmented control**
## Usage
DTPagerController is extremely easy to use. In order to display two view controllers inside a pager controller. All you have to do is this many lines of code.
```swift
let viewController1 = ViewController()
let viewController2 = ViewController()
let pagerController = DTPagerController(viewControllers: [viewController1, viewController2])
```
### Update page index
There are 3 different ways to update selected page index programmatically.```swift
// Update selected page index with animation
pagerController.selectedPageIndex = 1// Update selected page index with animation
pagerController.setSelectedPageIndex(1, animated: true)// Update selected page index without animation
pagerController.setSelectedPageIndex(1, animated: false)```
### Custom UI
DTPagerController is also customizable in case you want to implement your own UI.```swift
// Change the height of segmented control
pagerController.preferredSegmentedControlHeight = 60// Change normal font of each segmented control
pagerController.font = UIFont.customFont(ofSize: 15)// Change selected font of each segmented control
pagerController.selectedFont = UIFont.boldCustomFont(ofSize: 15)// Change normal text color of each segmented control
pagerController.textColor = UIColor.black// Change selected text color of each segmented control
pagerController.selectedTextColor = UIColor.red// Change scroll indicator height
pagerController.perferredScrollIndicatorHeight = 3```
### Custom segmented control
From version **2.0.0**, DTPagerController supports custom segmented control. Therefore, instead of using default **DTSegmentedControl**, you can provide your own segmented control or any 3rd-party segmented control libraries available out there. All you have to do is making your custom UIControl conform **DTSegmentedControlProtocol**. For example, as shown in sample project, **HMSegmentedControl** is made to conform **DTSegmentedControlProtocol** by using extension:```swift
extension HMSegmentedControl: DTSegmentedControlProtocol {
public func setImage(_ image: UIImage?, forSegmentAt segment: Int) {
// Custom page control does not support
}
public func setTitle(_ title: String?, forSegmentAt segment: Int) {
// Custom page control does not support
}
public func setTitleTextAttributes(_ attributes: [AnyHashable : Any]?, for state: UIControlState) {
if state == UIControlState.normal {
titleTextAttributes = attributes
}
else if state == UIControlState.selected {
selectedTitleTextAttributes = attributes
}
}
}```
Then we create new pager controller with the custom segmented control:
```swift
init(viewControllers controllers: [UIViewController]) {
let segmentedControl = HMSegmentedControl(sectionTitles: ["Page 1", "Page 2", "Page 3"])
super.init(viewControllers: controllers, pageSegmentedControl: segmentedControl!)
}```
When using custom segmented control, it is recommneded to override/take a look at the following methods to customize behavior and appearance of each segments:
```swift
// Setup custom segmented control
func setUpSegmentedControl(viewControllers: [UIViewController])// Update a custom appearance for segment
func updateAppearanceForSegmentedItem(at index: Int)// Update a custom scroll indicator if exists
func updateScrollIndicator(with offsetRatio: CGFloat, scrollView: UIScrollView)// Setup custom scroll indicator
func setUpScrollIndicator()// Manually update segment title
func setTitle(_ title: String?, forSegmentAt segment: Int)
// Manually update segment image
func setImage(_ image: UIImage?, forSegmentAt segment: Int)```
## Example
To run the example project, clone the repo, and run `pod install` from the Example directory first.
## Requirements
### iOS 9.0+## Installation
### CocoaPods
Simply add the following line to your Podfile:For Swift 5:
```ruby
pod 'DTPagerController'
```For Swift 4.2:
```ruby
pod 'DTPagerController', '~> 2.0.4'
```### Swift package manager
`DTPagerController` is available for SPM from version `3.0.2`.
Add the following to the dependencies of your `Package.swift`:```swift
.package(url: "https://github.com/tungvoduc/DTPagerController", from: "version")
```## Author
Tung Vo, [email protected]
## License
DTPagerController is available under the MIT license. See the LICENSE file for more info.
## Feedbacks & requests
- Open an issue if you find a bug, make a proposal or simply need some help.
- You can also contact me via [email](mailto:[email protected]).