您可以使用 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
子类对象),ViewPager 将使用它作为内容视图。
- viewPager:contentViewControllerForTabAtIndex:
和 - viewPager:contentViewForTabAtIndex:
dataSource 方法都是定义为可选的。但是,您至少应该实现其中之一!它们被定义为可选的以提供给您选择的机会。
所有 delegate 方法都是可选的。
#pragma mark - ViewPagerDelegate
- (void)viewPager:(ViewPagerController *)viewPager didChangeTabToIndex:(NSUInteger)index {
// Do something useful
}
ViewPager将通过 - viewPager:didChangeTabToIndex:
方法提醒您的 delegate 对象,因此您可以进行一些有用的操作。
#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:
delegate 方法更改 ViewPager 的选项。只需返回指定选项的期望值。您不需要为每个选项返回值。只返回对感兴趣选项的值,ViewPager 将使用默认值处理其他部分。可用选项在 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
,定义视图是否从第1个还是第2个标签开始显示。默认为 NO
ViewPagerOptionCenterCurrentTab
: 1.0: YES
, 0.0: NO
,定义是否应该使用给定标签宽度将标签居中。默认为 NO
ViewPagerOptionFixFormerTabsPositions
: 1.0: YES
, 0.0: NO
,定义是否应该将活动标签放置在左侧偏移量处的外边框处。仅影响前一个标签。如果设置为 1.0(YES
),第一个标签将与第二个位置相同,留出它之前的空间。默认为 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
,但我有一些关于它的精彩计划。所以如果你遇到问题、错误等,请原谅我,并提交一些 pull 请求。感谢您的兴趣和支持。
ICViewPager 使用 MIT 许可。有关更多信息,请参阅 LICENCE 文件。