iOS 实用方法集锦(一)

我们在代码编程中,经常用到各种小方法

下面是一些总结:(不定时增加)

16进制设置颜色

- (instancetype)colorFromHexString:(NSString *)hexString Alpha:(CGFloat)alpha
{
    unsigned rgbValue = 0;
    hexString = [hexString stringByReplacingOccurrencesOfString:@"#" withString:@""];
    NSScanner *scanner = [NSScanner scannerWithString:hexString];
    [scanner scanHexInt:&rgbValue];

    return [[self class] colorWithR:((rgbValue & 0xFF0000) >> 16) G:((rgbValue & 0xFF00) >> 8) B:(rgbValue & 0xFF) A:alpha];
}

//根据返回的16进制数据直接加“#”赋值 (有没有@“#”不会影响数值)

- (instancetype)colorFromHexString:(NSString *)hexString
{
    return [self colorFromHexString:hexString Alpha:1.0];
}

设置文本显示的长度,多余部分有。。。省略

-(NSString*)stringByTruncateWithLength:(NSInteger)length
{
    if( self.length > length )
    {
        NSMutableString *mstr = [NSMutableString stringWithString:self];
        [mstr deleteCharactersInRange:NSMakeRange(length-3, mstr.length-length+3)];//设置显示文本长度
        [mstr appendString:@"..."];
        return mstr;
    }
    else
        return self;
}

网络状态的监控

-(BOOL)networkAvailable
{
    //创建零地址,0.0.0.0的地址表示查询本机的网络连接状态

    struct sockaddr_in zeroAddress;
    bzero(&zeroAddress, sizeof(zeroAddress));
    zeroAddress.sin_len = sizeof(zeroAddress);
    zeroAddress.sin_family = AF_INET;

    // Recover reachability flags

    SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress);

    SCNetworkReachabilityFlags flags;

    //获得连接的标志

    BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags);

    CFRelease(defaultRouteReachability);

    if (!didRetrieveFlags)
    {
        return NO;
    }
    //根据获得的连接标志进行判断
    //    SCNetworkReachabilityFlags:保存返回的测试连接状态
    //    其中常用的状态有:
    //    kSCNetworkReachabilityFlagsReachable:能够连接网络
    //    kSCNetworkReachabilityFlagsConnectionRequired:能够连接网络,但是首先得建立连接过程
    //    kSCNetworkReachabilityFlagsIsWWAN:判断是否通过蜂窝网覆盖的连接,比如EDGE,GPRS或者目前的3G.主要是区别通过WiFi的连接

    BOOL isReachable = flags & kSCNetworkFlagsReachable;
    BOOL needsConnection = flags & kSCNetworkFlagsConnectionRequired;
    return (isReachable && !needsConnection) ? YES : NO;
}

#MD5方法加密

-(NSString*)md5WithString:(NSString *)str
{
    const char *cStr = [str UTF8String];
    unsigned char result[CC_MD5_DIGEST_LENGTH];
    CC_MD5(cStr, (CC_LONG)strlen(cStr), result);

    return [[NSString stringWithFormat:@"XXXXXXXXXXXXXXXX",
             result[0], result[1], result[2], result[3],
             result[4], result[5], result[6], result[7],
             result[8], result[9], result[10], result[11],
             result[12], result[13], result[14], result[15]
             ] lowercaseString];
}

获取本机IP地址

-(NSString*)localIP
{
    NSString *address = @"error";

    struct ifaddrs *interfaces = NULL;

    struct ifaddrs *temp_addr = NULL;

    int success = 0;

    // retrieve the current interfaces - returns 0 on success

    success = getifaddrs(&interfaces);

    if (success == 0) {

        // Loop through linked list of interfaces

        temp_addr = interfaces;

        while(temp_addr != NULL) {

            if(temp_addr->ifa_addr->sa_family == AF_INET) {

                // Check if interface is en0 which is the wifi connection on the iPhone

                if([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) {
                    // Get NSString from C String

                    address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
                }
            }
            temp_addr = temp_addr->ifa_next;
        }
    }

    // Free memory
    freeifaddrs(interfaces);

    return address;
}

几种字符串格式的校验

手机号码校验

-(BOOL)validatePhoneNumber:(NSString*)phoneNumber
{
    if ( phoneNumber.length == 0  || phoneNumber.length != 11 ) return NO;

    NSString *regex = @"^((13[0-9])|(147)|(145)|(15[0-9])|(17[0-9])|(18[0-9]))\\d{8}$";

    NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];

    BOOL isMatch = [pred evaluateWithObject:phoneNumber];

    if (!isMatch) {

        return NO;
    }
    return YES;
}

英文字符和数字混编校验(常用作密码校验)

-(BOOL)validatePassword:(NSString*)password
{
    if (password.length<8>16)
    {
        return NO ;
    }

    BOOL numberResult = NO;

    BOOL letterResult = NO;

    for (int i = 0; i<password xss=removed>=48 && character <= 57 ) && numberResult == NO)
        {
            numberResult = YES;
        }

        // A~Z   a~z

        if (((character >=65  && character <=90) || (character >=97  && character <=122))  && letterResult == NO)
        {
            letterResult = YES;
        }

        if (numberResult == YES && letterResult ==YES)
        {
            return YES;
        }

    }
    return NO;
}

邮箱校验

+(BOOL)validateEmailAddress:(NSString*)emailAddress
{
    NSString *emailRegex = @"[A-Z0-9a-z._%+-][email protected][A-Za-z0-9.-]+\\.[A-Za-z]{2,4}";

    NSPredicate *emailTest = [NSPredicate predicateWithFormat:@"SELF MATCHES%@",emailRegex];

    return [emailTest evaluateWithObject:emailAddress];
}

POST上传多个文件

//post上传数据

-(void)sendPostRequestWithFileToURL:(NSString*)apiName parameters:(NSDictionary*)params filePathName:(NSArray *)filePathName paramterName:(NSArray *)names mimeType:(NSArray *)mimeType
{
    AFHTTPRequestOperationManager * manager = [AFHTTPRequestOperationManager manager];

    manager.requestSerializer.timeoutInterval = 10.f;

    NSString *apiUrl = [self urlStringWithAPI:apiName];

    NSDictionary *finalParams = [self dictionaryByAddingCommonParameters:params];

    AFHTTPRequestOperation *operation = [manager POST:apiUrl parameters:finalParams constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {

        for(int i = 0;i&lt;filePathName.count;i++)
        {
            NSData *data = [NSData dataWithContentsOfFile:filePathName[i]];

            [formData appendPartWithFileData:data name:names[i] fileName:[filePathName[i] lastPathComponent] mimeType:mimeType[i]];

        }
    }
        success:^(AFHTTPRequestOperation * operation ,id responseObject) {

        failure:^(AFHTTPRequestOperation * operatioon,NSError * error) {

}

字典转化为JSON二进制数据流

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dicc options:NSJSONWritingPrettyPrinted error:nil];

“未完待续”

时间: 2024-10-02 18:44:24

iOS 实用方法集锦(一)的相关文章

Python中os和shutil模块实用方法集锦

# os 模块 os.sep 可以取代操作系统特定的路径分隔符.windows下为 '\\'os.name 字符串指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是 'posix'os.getcwd() 函数得到当前工作目录,即当前Python脚本工作的目录路径os.getenv() 获取一个环境变量,如果没有返回noneos.putenv(key, value) 设置一个环境变量值os.listdir(path) 返回指定目录下的所有文件和目录名o

【原】ios打包ipa的两种实用方法(.app转.ipa)

总结一下,目前.app包转为.ipa包的方法有以下几种: 1.Apple推荐的方式,即实用xcode的archive功能 Xcode菜单栏->Product->Archive->三选一,一般选后两个. 局限性:个人开发一般采用这种方法,但是当一个证书多人使用时就稍显麻烦.一般多人开发时都是采用provisioning profile+P12文件来进行真机调试.上述方法在最后导出ipa包时需要输入appleID,这时还要向团队的其他人要.采用provisioning profile+P12

iOS实用技巧 - 简易实现多皮肤功能

前言:不记得谁说的了,中国的用户大概是世界上最喜欢多皮肤功能的用户了.我很讨厌写安卓程序,图形界面设计工具及其难用,还不如手写,编辑器慢如蜗牛,智能提示总是跟不上我输入的速度,相同的功能,安卓的代码量至少是iOS的三倍,每写一行代码,都觉得自己的手指在滴血.可是安卓灵活统一的style功能确实很贴心!5之前,iOS平台上实现相同的功能一直没有个比较好的办法. iOS5之后,苹果将所有界面组件的设定,都绑定在一个叫UIAppearance的协议上了,你可以简单的通过UIAppearance设定组件

iOS实用技巧 - AFNetworking2安全的使用自签证书访问HTTPS

友情提示:本文使用的AFNetworking是最新git pull的2.3.1版本,如果想确认你机器上的AFNetworking版本,请打git tag命令查看. 绝大部分iOS程序的后台服务都是基于RESTful或者WebService的,不论在任何时候,你都应该将服务置于HTTPS上,因为它可以避免中间人攻击的问题,还自带了基于非对称密钥的加密通道!现实是这些年涌现了大量速成的移动端开发人员,这些人往往基础很差,完全不了解加解密为何物,使用HTTPS后,可以省去教育他们各种加解密技术,生活轻

EXCEL快速自动填充方法集锦

EXCEL快速自动填充方法集锦 原文地址,转载请注明:http://www.cnblogs.com/croso/p/5396841.html 方法一: 名称框输入a1:a1000回车,1, ctrl+回车,单击A1,双击填充柄,“自动填充选项”--“填充序列” 方法二: 先在A1输入需填充的内容,然后点右上角的填充按钮,点击“系列”选项,输入终止值 方法三: 编辑 定位 输入需要输入数据的最后一个单元格的位置ctrl ↑(方向键的上箭头) 编辑栏输入公式=MOD(ROW()-1,2)+1按ctr

IOS上传图片方法类

IOS上传图片方法类 iPhone开发中遇到上传图片问题,找到多资料,最终封装了一个类,请大家指点,代码如下 // // RequestPostUploadHelper.h // demodes // // Created by 张浩 on 13-5-8. // Copyright (c) 2013年 张浩. All rights reserved. // #import <Foundation/Foundation.h> @interface RequestPostUploadHelper

Android反编译工具介绍与简单实用方法

Android反编译工具介绍与简单实用方法 Android反编译的目的无非就是为了看到APK的xml.资源和代码: 得到代码的方式:直接解压APK文件 --> 得到classes.dex文件 --> 使用 dex2jar classes.dex classes.jar生成jar文件 --> [可选的解压jar文件] -->使用XJad或者JDCompiler查看源代码 得到XML的方式: 方式1:直接解压APK文件 --> 通过axmlprinter工具查看XML文件(这种方

js+jquery动态设置/增加/删除/获取元素属性的两种方法集锦对比(动态onclick属性设置+动态title设置)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html140/strict.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <title>

iOS 处理方法中的可变參数

## iOS 处理方法中的可变參数 近期写了一个自己定义的对话框的demo,想模仿系统的UIAlertView的实现方式.对处理可变參数的时候,遇到了小问题,于是谷歌了一下.写下了处理问题的方法.记录下来,以备后需. 代码实现 - (instancetype)initWithTitle:(NSString *)title message:(NSString *)message delegate:(id)delegate cancelButtonTitle:(NSString *)cancelBu