美文网首页
ios枚举的定义与使用

ios枚举的定义与使用

作者: Arthur澪 | 来源:发表于2018-05-29 16:54 被阅读0次

    定义

    在类的.h文件中,

    一. NS_ENUM,定义状态等普通枚举

    typedef NS_ENUM(NSUInteger, myKeyBoardType) {
        KeyBoardTypeDefault = 0,
        KeyBoardTypeNumber,
        KeyBoardTypeEmail
    };
    
    ····
    
    /*与枚举命名相同的属性
    @property(nonatomic,assign)NSUInteger myKeyBoardType;
    
    ······
    
    / *重写属性myKeyBoardType的set方法
    -(void)setKeyboardType:(NSUInteger)keyboardType{
        
        switch (keyboardType) {
            case 0:
                _inputTF.keyboardType = UIKeyboardTypeDefault;
                break;
            case 1:
                _inputTF.keyboardType = UIKeyboardTypePhonePad;
                break;
            case 2:
                _inputTF.keyboardType = UIKeyboardTypeEmailAddress;
                break;
                
            default:
                break;
        }
        
    }
    

    二. NS_OPTIONS,定义选项

    /*typedef NS_OPTIONS(NSUInteger, TTGDirection) {
        TTGDirectionNone = 0,
        TTGDirectionTop = 1 << 0,
        TTGDirectionLeft = 1 << 1,
        TTGDirectionRight = 1 << 2,
        TTGDirectionBottom = 1 << 3
    };*/
    

    使用

    在需要的地方导入类文件,

    外界对属性myKeyBoardType进行赋值时,会直接提示枚举中的选项。

    应用——根据不同类型创建按钮

    创建一个uibutton分量
    .h中

    typedef NS_ENUM(NSUInteger, MKButtonEdgeInsetsStyle) {
        MKButtonEdgeInsetsStyleTop, // image在上,label在下
        MKButtonEdgeInsetsStyleLeft, // image在左,label在右
        MKButtonEdgeInsetsStyleBottom, // image在下,label在上
        MKButtonEdgeInsetsStyleRight // image在右,label在左
    };
    
    @interface UIButton (ImageTitleSpacing)
    
    // 添加创建方法
    - (void)layoutButtonWithEdgeInsetsStyle:(MKButtonEdgeInsetsStyle)style
                            imageTitleSpace:(CGFloat)space;
    
    @end
    

    .m中,实现创建方法

    
    - (void)layoutButtonWithEdgeInsetsStyle:(MKButtonEdgeInsetsStyle)style
                            imageTitleSpace:(CGFloat)space
    {    
        /**
         *  前置知识点:titleEdgeInsets是title相对于其上下左右的inset,跟tableView的contentInset类似,
         *  如果只有title,那它上下左右都是相对于button的,image也是一样;
         *  如果同时有image和label,那这时候image的上左下是相对于button,右边是相对于label的;title的上右下是相对于button,左边是相对于image的。
         */
        
        // 1. 得到imageView和titleLabel的宽、高
        CGFloat imageWith = self.imageView.frame.size.width;
        CGFloat imageHeight = self.imageView.frame.size.height;
        
        CGFloat labelWidth = 0.0;
        CGFloat labelHeight = 0.0;
        if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0) {
            // 由于iOS8中titleLabel的size为0,用下面的这种设置
            labelWidth = self.titleLabel.intrinsicContentSize.width;
            labelHeight = self.titleLabel.intrinsicContentSize.height;
        } else {
            labelWidth = self.titleLabel.frame.size.width;
            labelHeight = self.titleLabel.frame.size.height;
        }
        
        // 2. 声明全局的imageEdgeInsets和labelEdgeInsets
        UIEdgeInsets imageEdgeInsets = UIEdgeInsetsZero;
        UIEdgeInsets labelEdgeInsets = UIEdgeInsetsZero;
        
        // 3. 根据style和space得到imageEdgeInsets和labelEdgeInsets的值
        switch (style) {
            case MKButtonEdgeInsetsStyleTop:
            {
                imageEdgeInsets = UIEdgeInsetsMake(-labelHeight-space/2.0, 0, 0, -labelWidth);
                labelEdgeInsets = UIEdgeInsetsMake(0, -imageWith, -imageHeight-space/2.0, 0);
            }
                break;
            case MKButtonEdgeInsetsStyleLeft:
            {
                imageEdgeInsets = UIEdgeInsetsMake(0, -space/2.0, 0, space/2.0);
                labelEdgeInsets = UIEdgeInsetsMake(0, space/2.0, 0, -space/2.0);
            }
                break;
            case MKButtonEdgeInsetsStyleBottom:
            {
                imageEdgeInsets = UIEdgeInsetsMake(0, 0, -labelHeight-space/2.0, -labelWidth);
                labelEdgeInsets = UIEdgeInsetsMake(-imageHeight-space/2.0, -imageWith, 0, 0);
            }
                break;
            case MKButtonEdgeInsetsStyleRight:
            {
                imageEdgeInsets = UIEdgeInsetsMake(0, labelWidth+space/2.0, 0, -labelWidth-space/2.0);
                labelEdgeInsets = UIEdgeInsetsMake(0, -imageWith-space/2.0, 0, imageWith+space/2.0);
            }
                break;
            default:
                break;
        }
        
        // 4. 赋值
        self.titleEdgeInsets = labelEdgeInsets;
        self.imageEdgeInsets = imageEdgeInsets;
    }
        
    

    相关文章

      网友评论

          本文标题:ios枚举的定义与使用

          本文链接:https://www.haomeiwen.com/subject/abbavxtx.html