Latest2.2.0
Homepagehttps://github.com/dvlproad/RadioButtons
LicenseMIT
Platformsios 7.0, requires ARC
FrameworksUIKit

目录

1、RadioButtons
单选按钮的组合

2、RadioComposeView
单选视图

3、CJButtonControllerView
类似网易新闻左右滑动的控制器的“父类”(为1和2的结合使用)

一、RadioButtons

单选按钮的组合

Screenshots

Example
Example
Example
Example

How to use

  • RadioButtons("组合按钮")的使用
//①、初始化如下:
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    self.view.backgroundColor = [UIColor lightGrayColor];

    self.titles =  @[@"Home1第一页", @"Home2", @"Home3是佛恩", @"Home4天赐的爱", @"Home5你是礼物", @"Home6", @"Home7", @"Home8", @"Home9", @"Home10", @"Home11", @"Home12", @"Home13", @"Home14", @"Home15"];

    self.sliderRadioButtons.dataSource = self;
    self.sliderRadioButtons.delegate = self;
}

//②实现数据源 `RadioButtonsDataSource `
- (NSInteger)cj_numberOfComponentsInRadioButtons:(RadioButtons *)radioButtons {
    return self.titles.count;
}

- (CGFloat)cj_radioButtons:(RadioButtons *)radioButtons widthForComponentAtIndex:(NSInteger)index  {
    NSInteger showViewCount = 6;
    CGFloat sectionWidth = CGRectGetWidth(radioButtons.frame)/showViewCount;
    return ceilf(sectionWidth); 
}

- (RadioButton *)cj_radioButtons:(RadioButtons *)radioButtons cellForComponentAtIndex:(NSInteger)index {
    NSArray *radioButtonNib = [[NSBundle mainBundle]loadNibNamed:@"RadioButton_Slider" owner:nil options:nil];
    RadioButton *radioButton = [radioButtonNib lastObject];
    [radioButton setTitle:self.titles[index]];
    radioButton.textNormalColor = [UIColor blackColor];
    radioButton.textSelectedColor = [UIColor greenColor];

    return radioButton;
}

//③实现数据委托 `RadioButtonsDelegate`
- (void)cj_radioButtons:(RadioButtons *)radioButtons chooseIndex:(NSInteger)index_cur oldIndex:(NSInteger)index_old {
    NSLog(@"index_old = %ld, index_cur = %ld", index_old, index_cur);
}

重点注意 - (CGFloat)cj_radioButtons:(RadioButtons *)radioButtons widthForComponentAtIndex:(NSInteger)index中的宽度计算若是通过除法得来,
即当使用除法计算width时候,为了避免计算出来的值受除后,余数太多,除不尽(eg:102.66666666666667),而造成的之后在通过左右箭头点击来寻找”要找的按钮“的时候,计算出现问题(”要找的按钮“需与“左右侧箭头的最左最右侧值”进行精确的比较),所以这里我们需要一个整数值,故我们这边选择向上取整。

二、RadioComposeView

//1、初始化
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.

    self.componentViewControllers = [self getComponentViewControllers];

    self.radioComposeView.dataSource = self;
    self.radioComposeView.delegate = self;
}

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];

    [self.radioComposeView scrollToCenterViewWithAnimate:NO];
}
//2、实现数据源 `RadioComposeViewDataSource`
- (NSArray<UIView *> *)cj_radioViewsInRadioComposeView:(RadioComposeView *)radioComposeView {
    NSArray *componentViewControllers = self.componentViewControllers;

    NSMutableArray *views = [[NSMutableArray alloc] init];
    for (UIViewController *vc in componentViewControllers) {
        [views addObject:vc.view];
        [self addChildViewController:vc];//记得添加进去
    }

    return views;
}
//3、实现数据委托 `RadioComposeViewDelegate`
- (void)cj_radioComposeView:(RadioComposeView *)radioComposeView didChangeToIndex:(NSInteger)index {
    NSLog(@"点击了%ld", index);
}

三、CJButtonControllerView

类似网易新闻左右滑动的控制器的“父类”

ScrollView循环滚动的原理

原理:初始化的时候,生成左·中·右视图,并为左·中·右视图附上正确的视图内容。之后,就是滚动的时候的处理了。这里滚动的时候的处理为:正在滚动过程中,滚动看到的视图,还是这一次生成的视图。但是滚动结束后,我们需要进行一次偷梁换柱即:滚动结束后,把这一次左·中·右视图上的视图,全部remove掉,并且为左·中·右视图重新附上新的视图,同时将scrollView滚动到这一次视图应该滚动到的位置,也就是为中视图的位置。这样就会让用户看不出来,其实我们已经进行了一次视图的重新改变,只是改变后显示的内容位置刚刚好覆盖住了上一次的内容,而让用户察觉不到,最终大功告成。

//①、初始化
@property (nonatomic, strong) IBOutlet CJButtonControllerView *buttonControllerView;

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.

    self.buttonControllerView.titles =  @[@"Home1第一页", @"Home2", @"Home3是佛恩", @"Home4天赐的爱", @"Home5你是礼物", @"Home6"];
    self.buttonControllerView.componentViewControllers = [self getComponentViewControllers];
    self.buttonControllerView.componentViewParentViewController = self;

    self.buttonControllerView.dataSource = self;
    self.buttonControllerView.delegate = self;
    [self.buttonControllerView reloadData];
}
②实现数据源 `CJButtonControllerViewDataSource`
- (RadioButton *)cj_buttonControllerView:(CJButtonControllerView *)buttonControllerView cellForComponentAtIndex:(NSInteger)index {
    NSArray *radioButtonNib = [[NSBundle mainBundle]loadNibNamed:@"RadioButton_Slider" owner:nil options:nil];
    RadioButton *radioButton = [radioButtonNib lastObject];

    radioButton.textNormalColor = [UIColor blackColor];
    radioButton.textSelectedColor = [UIColor whiteColor];

    return radioButton;
}
//③实现数据委托 `CJButtonControllerViewDelegate`
- (void)cj_buttonControllerView:(CJButtonControllerView *)buttonControllerView didChangeToIndex:(NSInteger)index {
    NSLog(@"didChangeToIndex = %ld", index);
}

Latest podspec

{
    "name": "RadioButtons",
    "version": "2.2.0",
    "summary": "u5355u9009u6309u94aeu7684u7ec4u5408RadioButtons",
    "homepage": "https://github.com/dvlproad/RadioButtons",
    "license": "MIT",
    "authors": "dvlproad",
    "platforms": {
        "ios": "7.0"
    },
    "source": {
        "git": "https://github.com/dvlproad/RadioButtons.git",
        "tag": "RadioButtons_2.2.0"
    },
    "source_files": "RadioButtons/**/*.{h,m}",
    "resources": "RadioButtons/**/*.{png,xib}",
    "frameworks": "UIKit",
    "requires_arc": true
}

Pin It on Pinterest

Share This