Giter VIP home page Giter VIP logo

xlpagertabstrip's Introduction

XLPagerTabStripView

Build status Platform iOS Swift 5 compatible Carthage compatible CocoaPods compatible License: MIT

Made with โค๏ธ by XMARTLABS.

Android PagerTabStrip for iOS!

๐Ÿ‘‰ Looking for a SwiftUI version? Check out PagerTabStripView, it's fully written in pure SwiftUI. ๐Ÿ‘ˆ

XLPagerTabStrip is a Container View Controller that allows us to switch easily among a collection of view controllers. Pan gesture can be used to move on to next or previous view controller. It shows a interactive indicator of the current, previous, next child view controllers.

Getting involved

  • If you want to contribute please feel free to submit pull requests.
  • If you have a feature request please open an issue.
  • If you found a bug or need help please check older issues, FAQ and threads on StackOverflow (Tag 'XLPagerTabStrip') before submitting an issue.

Before contribute check the CONTRIBUTING file for more info.

If you use XLPagerTabStrip in your app we would love to hear about it! Drop us a line on twitter.

Pager Types

The library provides 4 different ways to show the view controllers.

Button Bar

This is likely the most common pager type. It's used by many well-known apps such as instagram, youtube, skype, and many others.

Bar

This mode doesn't show a title neither an image. It only shows a bar that indicates the current view controller.

Twitter

A long time ago, the twitter app made use of this type of pager in the app main screen.

Segmented

This mode uses a UISegmentedControl to indicate which view controller is being displayed.

Usage

Basically, we just need to provide the list of child view controllers to show, and these view controllers should provide the information (title or image) that will be shown in the associated indicator.

Let's see the steps to do this:

Choose which type of pager we want to create

First, we must choose the type of pager we want to create. Depending on our choice, we will have to create a view controller that extends from one of the following controllers: TwitterPagerTabStripViewController, ButtonBarPagerTabStripViewController, SegmentedPagerTabStripViewController, BarPagerTabStripViewController.

All these built-in pager controllers extend from the base class PagerTabStripViewController. You can also make your custom pager controller by extending directly from PagerTabStripViewController in the event that no pager menu type fits your needs.

import XLPagerTabStrip

class MyPagerTabStripName: ButtonBarPagerTabStripViewController {
  ..
}
Connect outlets and add layout constraints

We strongly recommend using IB to set up our page controller views.

Drag a UIViewController into the storyboard and set up its class with your pager controller (MyPagerTabStripName). Drag a UIScrollView into your view controller view and connect PagerTabStripViewController containerView outlet with the scroll view.

Depending on which type of paging view controller you are working with you may have to connect more outlets.

For BarPagerTabStripViewController, we should connect barView outlet. barView type is UIView. ButtonBarPagerTabStripViewController requires us to connect buttonBarView outlet. buttonBarView type is ButtonBarView which extends from UICollectionView. SegmentedPagerTabStripViewController has a segmentedControl outlet; if the outlet is not connected the library try to set up the navigationItem titleView property using a UISegmentedControl. TwitterPagerTabStripViewController doesn't require us to connect any additional outlet.

The example project contains a example for each pager controller type and we can look into it to see how views were added and how outlets were connected.

Provide the view controllers that will appear embedded into the PagerTabStrip view controller

You can provide the view controllers by overriding func viewControllers(for: pagerTabStripController: PagerTabStripViewController) -> [UIViewController] method.

override public func viewControllers(for pagerTabStripController: PagerTabStripViewController) -> [UIViewController] {
  return [MyEmbeddedViewController(), MySecondEmbeddedViewController()]
}

The method above is the only method declared in PagerTabStripDataSource protocol. We don't need to explicitly conform to it since base pager class already does it.

Provide information to show in each indicator

Every UIViewController that will appear within the PagerTabStrip needs to provide either a title or an image. In order to do so they should conform to IndicatorInfoProvider by implementing func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo which provides the information required to show the PagerTabStrip menu (indicator) associated with the view controller.

class MyEmbeddedViewController: UITableViewController, IndicatorInfoProvider {

  func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo {
    return IndicatorInfo(title: "My Child title")
  }
}

For a detailed step-by-step guide about how to use the library, please check out this community blog post.

That's it! We're done! ๐Ÿป๐Ÿป

Customization

Pager Behaviour

The pager indicator can be updated progressive as we swipe or at once in the middle of the transition between the view controllers. By setting up pagerBehaviour property we can choose how the indicator should be updated.

public var pagerBehaviour: PagerTabStripBehaviour
public enum PagerTabStripBehaviour {
    case common(skipIntermediteViewControllers: Bool)
    case progressive(skipIntermediteViewControllers: Bool, elasticIndicatorLimit: Bool)
}

Default Values:

// Twitter Type
PagerTabStripBehaviour.common(skipIntermediateViewControllers: true)
// Segmented Type
PagerTabStripBehaviour.common(skipIntermediateViewControllers: true)
// Bar Type
PagerTabStripBehaviour.progressive(skipIntermediateViewControllers: true, elasticIndicatorLimit: true)
// ButtonBar Type
PagerTabStripBehaviour.progressive(skipIntermediateViewControllers: true, elasticIndicatorLimit: true)

As you might have noticed, common and progressive enumeration cases have skipIntermediateViewControllers and elasticIndicatorLimit associated values.

skipIntermediateViewControllers allows us to skip intermediate view controllers when a tab indicator is tapped.

elasticIndicatorLimit allows us to tension the indicator when we reach a limit, I mean when we try to move forward from last indicator or move back from first indicator.

PagerTabStripDelegate & PagerTabStripIsProgressiveDelegate

Normally we don't need to implement these protocols because each pager type already conforms to it in order to properly update its indicator. However, there may be some scenarios when overriding a method may come in handy.

public protocol PagerTabStripDelegate: class {

    func updateIndicator(for viewController: PagerTabStripViewController, fromIndex: Int, toIndex: Int)
}

public protocol PagerTabStripIsProgressiveDelegate : PagerTabStripDelegate {

    func updateIndicator(for viewController: PagerTabStripViewController, fromIndex: Int, toIndex: Int, withProgressPercentage progressPercentage: CGFloat, indexWasChanged: Bool)
}

Again, the method invoked by the library depends on the pagerBehaviour value.

ButtonBar Customization

settings.style.buttonBarBackgroundColor: UIColor?
// buttonBar minimumInteritemSpacing value, note that button bar extends from UICollectionView
settings.style.buttonBarMinimumInteritemSpacing: CGFloat?
// buttonBar minimumLineSpacing value
settings.style.buttonBarMinimumLineSpacing: CGFloat?
// buttonBar flow layout left content inset value
settings.style.buttonBarLeftContentInset: CGFloat?
// buttonBar flow layout right content inset value
settings.style.buttonBarRightContentInset: CGFloat?

// selected bar view is created programmatically so it's important to set up the following 2 properties properly
settings.style.selectedBarBackgroundColor = UIColor.black
settings.style.selectedBarHeight: CGFloat = 5

// each buttonBar item is a UICollectionView cell of type ButtonBarViewCell
settings.style.buttonBarItemBackgroundColor: UIColor?
settings.style.buttonBarItemFont = UIFont.systemFont(ofSize: 18)
// helps to determine the cell width, it represent the space before and after the title label
settings.style.buttonBarItemLeftRightMargin: CGFloat = 8
settings.style.buttonBarItemTitleColor: UIColor?
// in case the barView items do not fill the screen width this property stretch the cells to fill the screen
settings.style.buttonBarItemsShouldFillAvailableWidth = true
// only used if button bar is created programmatically and not using storyboards or nib files as recommended.
public var buttonBarHeight: CGFloat?

Important: Settings should be called before viewDidLoad is called.

override func viewDidLoad() {
   self.settings.style.selectedBarHeight = 2
   self.settings.style.selectedBarBackgroundColor = UIColor.white

   super.viewDidLoad()
}
Update cells when selected indicator changes

We may need to update the indicator cell when the displayed view controller changes. The following function properties help to accomplish that. Depending on our pager pagerBehaviour value we will have to set up changeCurrentIndex or changeCurrentIndexProgressive.

public var changeCurrentIndex: ((oldCell: ButtonBarViewCell?, newCell: ButtonBarViewCell?, animated: Bool) -> Void)?
public var changeCurrentIndexProgressive: ((oldCell: ButtonBarViewCell?, newCell: ButtonBarViewCell?, progressPercentage: CGFloat, changeCurrentIndex: Bool, animated: Bool) -> Void)?

Let's see an example:

changeCurrentIndexProgressive = { (oldCell: ButtonBarViewCell?, newCell: ButtonBarViewCell?, progressPercentage: CGFloat, changeCurrentIndex: Bool, animated: Bool) -> Void in
    guard changeCurrentIndex == true else { return }

    oldCell?.label.textColor = UIColor(white: 1, alpha: 0.6)
    newCell?.label.textColor = UIColor.white

    if animated {
        UIView.animate(withDuration: 0.1, animations: { () -> Void in
            newCell?.transform = CGAffineTransform(scaleX: 1.0, y: 1.0)
            oldCell?.transform = CGAffineTransform(scaleX: 0.8, y: 0.8)
        })
    }
    else {
        newCell?.transform = CGAffineTransform(scaleX: 1.0, y: 1.0)
        oldCell?.transform = CGAffineTransform(scaleX: 0.8, y: 0.8)
    }
}

Bar Type Customization

settings.style.barBackgroundColor: UIColor?
settings.style.selectedBarBackgroundColor: UIColor?
// barHeight is only set up when the bar is created programmatically and not using storyboards or xib files as recommended.
settings.style.barHeight: CGFloat = 5

Twitter Type Customization

settings.style.dotColor = UIColor(white: 1, alpha: 0.4)
settings.style.selectedDotColor = UIColor.white
settings.style.portraitTitleFont = UIFont.systemFont(ofSize: 18)
settings.style.landscapeTitleFont = UIFont.systemFont(ofSize: 15)
settings.style.titleColor = UIColor.white

Segmented Type Customization

settings.style.segmentedControlColor: UIColor?

Requirements

  • iOS 9.3+
  • Xcode 10.2+

Examples

Follow these 3 steps to run Example project: Clone XLPagerTabStrip repository, open XLPagerTabStrip workspace and run the Example project.

Installation

CocoaPods

CocoaPods is a dependency manager for Cocoa projects.

To install XLPagerTabStrip, simply add the following line to your Podfile:

pod 'XLPagerTabStrip', '~> 9.0'

Carthage

Carthage is a simple, decentralized dependency manager for Cocoa.

To install XLPagerTabStrip, simply add the following line to your Cartfile:

github "xmartlabs/XLPagerTabStrip" ~> 9.0

SPM

  • File > Swift Packages > Add Package Dependency
  • Add https://github.com/xmartlabs/XLPagerTabStrip.git
  • Select "Up to Next Major" with "9.0.0"

FAQ

How to change the visible child view controller programmatically

PagerTabStripViewController provides the following methods to programmatically change the visible child view controller:

func moveToViewController(at index: Int)
func moveToViewController(at index: Int, animated: Bool)
func moveTo(viewController: UIViewController)
func moveTo(viewController: UIViewController, animated: Bool)

How to migrate from Swift 2 to Swift 3

Check out our migration guide

Author

Change Log

This can be found in the CHANGELOG.md file.

xlpagertabstrip's People

Contributors

ajriverav avatar alexandergcx avatar alexanderkhitev avatar antrix1989 avatar codestage avatar colemancda avatar danielmandea avatar danielpetroianu avatar dentelezhkin avatar dotkebi avatar enrigalmig avatar gcutrini avatar ikesyo avatar jamesjychong avatar khronoss avatar m-revetria avatar maqix avatar marcshilling avatar martin-woolstenhulme avatar mats-claassen avatar mrugeshtank avatar mstolin avatar mtnbarreto avatar nayzak avatar nixsm avatar oliverpearmain avatar pastorin avatar ryogak avatar skyebook avatar xhzengaib avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

xlpagertabstrip's Issues

Tapping on buttons in button bar has no effect.

Hello everybody!
I am using the XLButtonBarPagerTabStripViewController variant. I might be missing something but the only way to navigate between child controllers is by swiping. Tapping on buttons has no effect.

XLButtonBarView cell misalignment

Hi there. I am having trouble getting the cells in my XLButtonBarView to properly align. The first one seems to be placed higher no matter what I do, and the indicator plus subsequent cells fall into the correct place.

Interestingly, I have another instance of XLButtonBarView elsewhere in the app which works fine, but can't seem to determine any difference between them, or why this instance has this problem.

The UIViewController is derived from XLButtonBarPagerTabStripViewController.

Please advise, and let me know if you need any additional details. I have attached some example images (the cells are red to highlight the issue).

ios simulator screen shot sep 5 2015 10 26 05 am
ios simulator screen shot sep 5 2015 10 26 02 am
ios simulator screen shot sep 5 2015 10 25 47 am

How to change the height of selectedBa.

Hi, I can change the selectedBar color by [self.buttonBarView.selectedBar setBackgroundColor:[UIColor redColor]], but is there a way to change the height of selectedBar?

Thanks a lot.

Hi! I have a little problem.

@mtnbarreto

When i insert some code in https://github.com/xmartlabs/XLPagerTabStrip/blob/master/XLPagerTabStrip/Demo/ChildViewController/TableChildExampleViewController.m#L32

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

     SameViewController *sameViewController = [[SameViewController alloc] init];
     [self presentViewController:sameViewController animated:YES completion:NULL];

}

but sameViewController InterfaceOrientations is UIInterfaceOrientationMaskLandscapeRight.

code :

- (NSUInteger) supportedInterfaceOrientations{
    return UIInterfaceOrientationMaskLandscapeRight;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
    return toInterfaceOrientation == UIInterfaceOrientationLandscapeRight;
}

the pager layout appear bug.

Jack

EXC_BAD_ACCESS on dealloc

There seems to be a issue when using XLSegmentedPagerTabStripViewController (and probably the other classes as well) in a UINavigationController. When pressing the 'Back'-button it crashes with an EXC_BAD_ACCESS-error. The problem seems to be that scrollViewDidScroll: is sent to containerView after it is deallocated. I have solved it by setting the containerView.delegate to nil in my subclass, but it should probably be implemented in the superclasses as well:

- (void)dealloc {
    self.containerView.delegate = nil;
}

I might submit a PR myself if i find the time and no one else does.

Crash Issue in Cocoapods Version

Cocoapods version crashes when using XLButtonBarPagerTabStripViewController due to unregistered collectionview cell.

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'could not dequeue a view of kind: UICollectionElementKindCell with identifier Cell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard'

Could not find the below line in the cocoapods version:
[self.buttonBarView registerNib:[UINib nibWithNibName:@"ButtonCell" bundle:nil] forCellWithReuseIdentifier:@"Cell"];

dynamic changing pagerTabStripChildViewControllers

I was trying to use XLButtonBarPagerTabStripViewController as extended ViewController,

using delegate method

- (NSArray *)childViewControllersForPagerTabStripViewController:(XLPagerTabStripViewController *)pagerTabStripViewController

to set @property NSMutableArray *tabCtrlsArray as return childViewControllers,

basic logic was one of the children view controller has sub detail view controller (under navigation controller) will trigger XLButtonBarPagerTabStripViewController to mutate tabCtrlsArray, then call reloadPagerTabStripView method to reload the contents.

However, reloadPagerTabStripView is not always changing the contents afterwards, which seems like some async issues.

But when I debug the process in XLButtonBarPagerTabStripViewController, the children view controllers seem changing correctly but not the view. And it happens randomly.

PS: In the sub detail view controller to get XLButtonBarPagerTabStripViewController:

PagerTabStripController *ptsCtrl = [self.storyboard instantiateViewControllerWithIdentifier:@"PagerTabStripCtrl"];
[ptsCtrl changeChildrenViewCtrls];

Is there any better way to mutate the pagerTabStripChildViewControllers in XLPagerTabStripViewController?

Navigation bar transparent problems?

Hello! @mtnbarreto

Here have a navigation bar transparent problems,

such as I set

[[UINavigationBar appearance] setBarStyle: UIBarStyleBlack];
[[UINavigationBar appearance] setTranslucent: YES];

and i set The TableViewController like this:

self.edgesForExtendedLayout = UIRectEdgeAll;
self.automaticallyAdjustsScrollViewInsets = YES;
self.extendedLayoutIncludesOpaqueBars = NO;

The navigation bar but cannot see the background transparent.

Jack

UISegmentedControl stops responding after switching segment

When I switch segment with swipe, it's ok, but when I switch segment on segmented control, then it stops responding and not changing at all.

EDIT:
Ok, I found a solution, but I don't know why it was the reason.
Problem disappeared when I removed these method:

  • (void)moveToViewControllerAtIndex:(NSUInteger)index

Cell data doesn't display if use storyboard to build cell

I found that the cell data is not displayed when I use storyboard to build cell.

However, tableview:(uitableview *)tableview cellforrowatindexpath:(nsindexpath *)indexpath is called.
Also, there is extra space on the top of the child view.

Any solution to solve the problem?

Thank you!

Scrolling in both dimensions at same time with XLTwitterPagerTabStripViewController

In the demo app, horizontal scrolling is disabled while the table view is scrolling vertically. However, in my app, as I scroll a UITableView, unless it is perfectly vertical, it is moves between child view controllers as it's scrolling.

Is there a trick to keep the horizontal scrolling from happening while the child table view is vertically scrolling?

Cannot see the titles using XLButtonBarPagerTabStripViewController

Using XLButtonBarPagerTabStripViewController there are no titles even if I use titleForPagerTabStripViewController delegate method in my childviewcontroller!

Childviewcontroller conforms to

pragma mark - XLPagerTabStripChildItem Delegate

  • (NSString *)titleForPagerTabStripViewController:(XLPagerTabStripViewController *)pagerTabStripViewController {
    return @"TITLE";
    }

And in my container class that is the Subclass of XLButtonBarPagerTabStripViewController I have to write:

//If I do not write below line app crashes! Already raised an issue on this earlier!
[self.buttonBarView registerClass:[XLButtonBarViewCell class] forCellWithReuseIdentifier:@"Cell"];

//As per the Demo
[self.buttonBarView setBackgroundColor:[UIColor greenColor]];
[self.buttonBarView.selectedBar setBackgroundColor:RGBCOLOR(52.0, 166.0, 212.0, 1.0)];

//And in below method I have 4 controllers showing as childcontrollers.

-(NSArray *)childViewControllersForPagerTabStripViewController:(XLPagerTabStripViewController *)pagerTabStripViewController
{
// .. Code to return multiple viewcontrollers ..
}

[Feature] Contextual Toolbar

I'm implementing a UIToolbar that sits at the bottom of my tab strip that changes its items based upon which child page is displayed.

If I created a pull request to add this to the repository, would it get accepted?

Animation when scrolling to new view controller is choppy

The animation when scrolling to a new view controller seems choppy. Once you get 50% of the way to the next view controller, it snaps right to that view controller.

This feels odd to me. Is there any way to edit the animations to make the transition smoother?

New Feature: Delegate methods notification of page change

I'd like to have delegate methods that I can hook into for 'willMoveToViewController: atIndex:' and 'didMoveToViewController: atIndex'.

I'd be happy to implement these if they will be pulled in. Thoughts from the owner of the library?

Adding Header

I'm curious if it's possible to add a header above the tab and make it so the pager remains sticky at the top once scrolled up.

fix bug:the TableView scroll with uncorrect position:Y

I used XLPagerTabStrip in IB:
image
When I touched XLButtonBarView in HaveFinishedViewController,the TableView scroll with incorrect position Y.I find the bug in XLPagerTabStripViewController.m:

line 157,160,288,395:[self.containerView setContentOffset:CGPointMake([self pageOffsetForChildIndex:index], 0) animated:YES];

and I fixed this bug by modify these line :

line 157,160,288,395: [self.containerView setContentOffset:CGPointMake([self pageOffsetForChildIndex:index], self.containerView.layer.bounds.origin.y) animated:animated];

because the Y-position isn't always 0,I use containerView's Y-position instead.

I hope this bug will be fixed in the future.

swift Don't work properly

use Xcode6.3 , Swift1.2 And CocoaPod

This is my Podfile

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

def main_Pods
    pod 'XLPagerTabStrip'
end

target :JustGo do
   main_Pods
end
This is my code
import UIKit
import XLPagerTabStrip

class SettingViewController: XLBarPagerTabStripViewController{

    override func viewDidLoad() {
        super.viewDidLoad()
        self.barView.selectedBar.backgroundColor = UIColor.orangeColor()
    }

    override func childViewControllersForPagerTabStripViewController(pagerTabStripViewController: XLPagerTabStripViewController!) -> [AnyObject]! {
        var viewCOntroller1 = UIViewController()
        viewCOntroller1.view.backgroundColor = UIColor.redColor()
        var viewCOntroller2 = UIViewController()
        viewCOntroller2.view.backgroundColor = UIColor.grayColor()
        var viewCOntroller3 = UIViewController()
        viewCOntroller3.view.backgroundColor = UIColor.purpleColor()
        return [viewCOntroller1,viewCOntroller2,viewCOntroller3]
    }
}
This is my StoryBoard screenshots

This is my StoryBoard screenshots

##### The problems

1.When coming into the page does not load the first ViewController
2.When sliding load to success. But your schedule page but failed.
This is my StoryBoard screenshots

Basic init

Can you add support for basic init in case people are not using nib or storyboard?

Swift - `currentIndex` is `nil`

I'm trying to use this library with a Swift project.

After pagerTabStripViewControllerInit is called, self.currentIndex is still returning nil, when it should be 0. This is causing the application to crash.

Any ideas why this may be?

Thanks

Text color based on selected state

Hi,
Can you add the ability to change the text color of XLButtonBarPagerTabStripViewController based on whether it's selected or not?

Cell missing in the UITableView

If I don't add this line: [self.tableView registerClass:[UserInfoBasicCell class] forCellReuseIdentifier:kCellIdentifierBasicCell];
It crashes at cellForRowAtIndexPath: [tableView dequeueReusableCellWithIdentifier:kCellIdentifierBasicCell forIndexPath:indexPath];

If I add that line, I can't see the cell. The cell is not programely created, it is created in the storyboard.
How to let the cell display?

Android Version

Do you have an android version for the XLPagerTabStrip. My main concern is switching page with onclick on the action bar menu. How do you implement a similar one in android like you did in this example? Thanks.

Selected color

Hello, great job man ๐Ÿ‘
How can I change the color of XLButtonBarPagerTabStripViewController selected index (it's orange now in the demos)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.