您可以使用 ViewPager 创建滑动标签。
滑动查看内容或从标签中选择或滑动标签并选择!
只需将 ViewPagerController.m 和 ViewPagerController.h 文件复制到您的项目中。
或者,您可以使用 CocoaPods(这是推荐的方式)。
pod 'ICViewPager'
从 ViewPagerController(作为 UIViewController
子类)派生一个子类,并在子类中实现 dataSource 和 delegate 方法。
在子类中将 self 分配为 dataSource 和 delegate,
- (void)viewDidLoad {
[super viewDidLoad];
self.dataSource = self;
self.delegate = self;
}
然后实现 dataSource 和 delegate 方法。
#pragma mark - ViewPagerDataSource
- (NSUInteger)numberOfTabsForViewPager:(ViewPagerController *)viewPager {
return 10;
}
返回 ViewPager 中将出现的标签数。
#pragma mark - ViewPagerDataSource
- (UIView *)viewPager:(ViewPagerController *)viewPager viewForTabAtIndex:(NSUInteger)index {
UILabel *label = [UILabel new];
label.text = [NSString stringWithFormat:@"Tab #%i", index];
[label sizeToFit];
return label;
}
返回将作为标签显示的视图。创建一个 UIView
对象(或任何 UIView
子类对象)并将其提供给 ViewPager,它将使用它作为标签视图。
#pragma mark - ViewPagerDataSource
- (UIViewController *)viewPager:(ViewPagerController *)viewPager contentViewControllerForTabAtIndex:(NSUInteger)index {
ContentViewController *cvc = [self.storyboard instantiateViewControllerWithIdentifier:@"contentViewController"];
return cvc;
}
返回将显示为内容的视图控制器。创建一个 UIViewController
对象(或任何 UIViewController
子类对象)并将其提供给 ViewPager,它将使用视图控制器的 view
属性作为内容视图。
或者,您还可以实现 - viewPager:contentViewForTabAtIndex:
方法并返回一个 UIView
对象(或任何 UIView
子类对象),ViewPage 将使用它作为内容视图。
在 dataSource 中定义了 - viewPager:contentViewControllerForTabAtIndex:
和 - viewPager:contentViewForTabAtIndex:
方法都是可选的。但您应该至少实现一个!它们被定义为可选的,以提供给您一种选择。
所有代理方法都是可选的。
#pragma mark - ViewPagerDelegate
- (void)viewPager:(ViewPagerController *)viewPager didChangeTabToIndex:(NSUInteger)index {
// Do something useful
}
ViewPager 会通过 - viewPager:didChangeTabToIndex:
方法通知您的代理对象,以便您可以执行一些有用的事。
#pragma mark - ViewPagerDelegate
- (CGFloat)viewPager:(ViewPagerController *)viewPager valueForOption:(ViewPagerOption)option withDefault:(CGFloat)value {
switch (option) {
case ViewPagerOptionStartFromSecondTab:
return 0.0;
case ViewPagerOptionCenterCurrentTab:
return 0.0;
case ViewPagerOptionTabLocation:
return 0.0;
default:
return value;
}
}
您可以通过 viewPager:valueForOption:withDefault:
代理方法更改 ViewPager 的选项。只需返回给定选项所需的值。您不需要为每个选项返回值。只为感兴趣的选项返回值,ViewPage 会使用默认值处理其余部分。可用的选项定义在 ViewPagerController.h
文件中,下面将描述。
#pragma mark - ViewPagerDelegate
- (UIColor *)viewPager:(ViewPagerController *)viewPager colorForComponent:(ViewPagerComponent)component withDefault:(UIColor *)color {
switch (component) {
case ViewPagerIndicator:
return [[UIColor redColor] colorWithAlphaComponent:0.64];
default:
return color;
}
}
您还可以更改一些颜色。就像选项一样,返回感兴趣组件的颜色,并省略所有其他部件! 链接
每个选项都有一个默认值。所以
ViewPagerOptionTabHeight
:标签栏的高度,默认为44.0ViewPagerOptionTabOffset
:标签栏从左侧的距离,默认为56.0ViewPagerOptionTabWidth
:任何标签项的宽度,默认为128.0ViewPagerOptionTabLocation
:1.0:顶部,0.0:底部,默认为顶部ViewPagerOptionStartFromSecondTab
:1.0:YES
,0.0:NO
,定义视图是否从第一个标签或第二个标签开始。默认为NO
ViewPagerOptionCenterCurrentTab
:1.0:YES
,0.0:NO
,定义标签是否应该居中,给定标签宽度。默认为NO
ViewPagerOptionFixFormerTabsPositions
:1.0:YES
,0.0:NO
,定义活动的标签是否应该通过偏移量向左边放置。仅影响以前的标签。如果设置为1.0(《YES》),第一个标签将与第二个标签放在同一位置, leaving space before itself。默认为NO
ViewPagerOptionFixLatterTabsPositions
:1.0:YES
,0.0:NO
,类似于ViewPagerOptionFixFormerTabsPositions
,但影响后标签,使它们在自身后面留出空间。默认为NO
ViewPagerController的主要部分
ViewPagerIndicator
:活动标签视图中的彩色线条。ViewPagerTabsView
:标签视图本身。当在- viewPager:colorForComponent:withDefault:
方法中使用时,返回的颜色将被用作标签视图的背景颜色。ViewPagerContent
:提供视图作为内容。当在- viewPager:colorForComponent:withDefault:
方法中使用时,返回的颜色将被用作内容视图的背景颜色。ViewPager支持最低iOS 6和ARC。
同时支持iPhone和iPad。
注意(对所有对ViewPager
感兴趣的人):我不能长时间抽出时间来改进ViewPager
,但我有一些关于它的酷计划。所以,如果你遇到任何问题、错误等,请原谅我,并发出一些拉取请求。感谢您的兴趣和支持。
ICViewPager采用MIT许可证。有关更多信息,请参阅LICENCE文件。