• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ios > UISegmentedControl自定义效果

UISegmentedControl自定义效果

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-05

佚名通过本文主要向大家介绍了uisegmentedcontrol,我的世界自定义效果,ppt自定义效果,ppt自定义动画效果,自定义动画效果等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: UISegmentedControl自定义效果
描述:

想实现如图的uisegmentedcontrol效果,没有边框、未选中的时候下划线是浅色的,选中是黑色的实线。请高手指点,谢谢!(如果不用图片的话)


解决方案1:

系统提供的uisegmentedcontrol可定制内容太少,我在项目中一般自己使用UIView+UIButton实现类似效果

解决方案2:

有注释就直接贴代码了


#import <UIKit/UIKit.h>

@protocol CJNaviViewDelegate <NSObject>

- (void)D_selectedTag:(NSInteger)tag;

@end

@interface CJNaviView : UIView


- (instancetype)initWithNumberOfTitles:(NSArray *)titles andFrame:(CGRect)frame delegate:(id<CJNaviViewDelegate>)delegate;

@end

CJNaviView.m
#import "CJNaviView.h"

#define kSelectedColor [UIColor grayColor]
#define kNormalColor   [UIColor lightGrayColor]
// Button进行封装
@interface CJNaviButton:UIButton

@property (nonatomic, weak) UIView *lineView;

@end

@implementation CJNaviButton

- (instancetype)initWithFrame:(CGRect)frame{
    if (self = [super initWithFrame:frame]) {
        CGFloat lineWidth = 3;
        UIView *lineView = [[UIView alloc] initWithFrame:CGRectMake(0, frame.size.height - lineWidth, frame.size.width, lineWidth)];
        // 设置初始状态
        lineView.backgroundColor = kNormalColor;
//        lineView.hidden = YES;
        _lineView = lineView;
        [self setTitleColor:kNormalColor forState:UIControlStateNormal];
        self.titleLabel.font = [UIFont systemFontOfSize:14];
        [self setBackgroundColor:[UIColor whiteColor]];
        [self addSubview:lineView];
        
    }
    return self;
}



@end

@interface CJNaviView()

@property (nonatomic, weak) id<CJNaviViewDelegate> delegate;

@property (nonatomic, strong) CJNaviButton *lastClickButton;
@end

@implementation CJNaviView
/**
 *  init方法
 *
 *  @param titles   title数组 :@[@"选项1",@"选项2"]
 *  @param frame    整个naviView frame
 *  @param delegate 设置代理
 *
 *  @return CJNaviView实例
 */
- (instancetype)initWithNumberOfTitles:(NSArray *)titles andFrame:(CGRect)frame delegate:(id<CJNaviViewDelegate>)delegate{
    if (self = [super initWithFrame:frame]) {
        // 设置代理
        self.delegate = delegate;
        CGFloat buttonWidth = SCREENSIZE.width / titles.count;

        for (int i = 0; i < titles.count; i ++) {
            CJNaviButton *button = [[CJNaviButton alloc] initWithFrame:CGRectMake(i *buttonWidth, 0, buttonWidth, frame.size.height)];
            // 默认选中第一个 设置状态
            if (i == 0) {
                [button setTitleColor:kSelectedColor forState:UIControlStateNormal];
                button.lineView.backgroundColor = kSelectedColor;
                // 保留为上次选择中的button
                _lastClickButton = button;
            }
            // 设置对应的tag
            button.tag = i;
            [button setTitle:titles[i] forState:UIControlStateNormal];
            [button addTarget:self action:@selector(A_choosed:) forControlEvents:UIControlEventTouchUpInside];
            [self addSubview:button];
        }
    }
    
    
    
    return self;
    
}

- (void)A_choosed:(CJNaviButton *)button{
    // 连续点击同一个不响应回调
    if (_lastClickButton != button) {
        // 设置状态
        [button setTitleColor:kSelectedColor forState:UIControlStateNormal];
        button.lineView.backgroundColor = kSelectedColor;
        [_lastClickButton setTitleColor:kNormalColor forState:UIControlStateNormal];
        _lastClickButton.lineView.backgroundColor = kNormalColor;
        _lastClickButton = button;
        // 回调 可用block
        if ([self.delegate respondsToSelector:@selector(D_selectedTag:)]) {
            [self.delegate D_selectedTag:button.tag];
        }
    }
}


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • UISegmentedControl自定义效果

相关文章

  • 2017-06-05 ios当提示用户评价时,有方法知晓用户是否在AppStore评价了我的app吗?
  • 2017-06-05 苹果上传API,上传不了问题!
  • 2017-06-05 xcodearchiveXcode编译出现警告的原因都有哪些
  • 2017-06-05 iOS基础控件如何编译iOS版本Skia?
  • 2017-06-05 请问为什么初始化UICollectionViewController后,不进里面的cell代理方法
  • 2017-06-05 Couldnotfindastoryboardnamed'main'inbundleNSBundle
  • 2017-06-05 storyboardstoryboard页面跳转和传值
  • 2017-06-05 Avuser类关联AvFile对象无法下载文件iosSDK
  • 2017-06-05 蓝牙打印机IOS10蓝牙打印,打印到一半截断
  • 2017-06-05 怎么刷新页面IOS表格刷新以后为什么页面会上下的不规则移动

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • cnmp安装失败,报错npmERR!enoentENOENT:nosuchfileordirectory,
    • 在适配iOS10中,自带键盘的汉字候选变成了点点,请问怎么解决?
    • nsdictionary转nsarray,要求一对key--value转为nasty的一个元素
    • 头发颜色渐变颜色渐变问题
    • 产品需求写一个tableView每一个cell的倒计时功能,求设计思路
    • 如何将pdf文件转换成word文件将多张照片合成一个pdf文件
    • xcodearchiveXcode文件操作
    • 深圳iOSerMeetup——让iOS更有意思
    • iOS支持“用其他应用打开”,plist中设置DocumentTypes为哪种类型可以同时支持doc/docx?<UTIs>
    • cordovacordova选择图片并显示的问题

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有