1. 程式人生 > >iOS常見又通用的一些小方法集合(不定時更新,歡迎補充)

iOS常見又通用的一些小方法集合(不定時更新,歡迎補充)

開發過程中,往往會用到一些常見又通用的方法,整個工程中我們可能需要多次用到,或者多個工程中會用到相同的方法。比如判斷手機號、郵箱的合法性,在登入或者註冊相關頁面,我們都需要用到相應的方法去判斷,而如果我們每次都寫一個判斷方法的話,程式碼會顯得尤其的冗餘,這時候我們可以將這些方法都封裝起來,這樣每次使用的時候,直接呼叫相關的方法即可。在不同的工程之間也能進行復用。還有一些常見的小功能實現很簡單,但是我們可能不經常用,所以需要的時候未必能及時記起來。面對這樣的情況,我們可以將這些方法記錄起來,需要的時候,直接拿出來看一看就能知道如何實現了。今天呢,主要就收集一些常見通用的好東西,本文會不定時更新,同時也歡迎大家補充。

內容有:

1、手機號碼匹配
2、郵箱匹配
3、base64加密
4、時間戳轉換成指定格式的日期
5、日期轉換成時間戳
6、 十六進位制顏色轉換成UIColor
7、UITextField截斷指定長度的字串
8、開啟手機qq與指定人聊天
9、撥打電話

一、關於NSString的一些常用方法。

這部分我們可以對NSString寫一個類目,這樣我們匯入這個類目後,呼叫相關的方法即可。建立類目 NSString (CategoryMethods)

1、手機號碼匹配

宣告方法:
-(BOOL)isMobileNumber:(NSString *)mobileNum ;

實現該方法:

// 正則判斷手機號碼地址格式
- (BOOL)isMobileNumber:(NSString *)mobileNum {

    NSString *MOBILE = @"^1(3[0-9]|4[57]|5[0-35-9]|8[0-9]|7[0135678])\\d{8}$";

    NSPredicate *regextestmobile = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", MOBILE];

    return [regextestmobile evaluateWithObject:mobileNum];
}
2、郵箱匹配

宣告方法:
- (BOOL)isValidateEmail:(NSString *)email;
實現該方法:


//郵箱
-(BOOL)isValidateEmail:(NSString *)email
{
    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:email];
}
3、base64加密

宣告方法:
- (NSString *)base64;
實現該方法:

- (NSString *)base64 {
    NSData *data = [NSData dataWithBytes:[self UTF8String] length:[self lengthOfBytesUsingEncoding:NSUTF8StringEncoding]];
    NSUInteger length = [data length];
    NSMutableData *mutableData = [NSMutableData dataWithLength:((length + 2) / 3) * 4];

    uint8_t *input = (uint8_t *)[data bytes];
    uint8_t *output = (uint8_t *)[mutableData mutableBytes];

    for (NSUInteger i = 0; i < length; i += 3) {
        NSUInteger value = 0;
        for (NSUInteger j = i; j < (i + 3); j++) {
            value <<= 8;
            if (j < length) {
                value |= (0xFF & input[j]);
            }
        }

        static uint8_t const kAFBase64EncodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

        NSUInteger idx = (i / 3) * 4;
        output[idx + 0] = kAFBase64EncodingTable[(value >> 18) & 0x3F];
        output[idx + 1] = kAFBase64EncodingTable[(value >> 12) & 0x3F];
        output[idx + 2] = (i + 1) < length ? kAFBase64EncodingTable[(value >> 6)  & 0x3F] : '=';
        output[idx + 3] = (i + 2) < length ? kAFBase64EncodingTable[(value >> 0)  & 0x3F] : '=';
    }

    return [[NSString alloc] initWithData:mutableData encoding:NSASCIIStringEncoding];
}
4、時間戳轉換成指定格式的日期

宣告方法:

-(NSString *)getDateStringWithTimeInterval:(NSString *)timeInterval DataFormatterString:(NSString *)dataFormatterString;

實現該方法:


#pragma mark--時間戳轉換成日期
-(NSString *)getDateStringWithTimeInterval:(NSString *)timeInterval DataFormatterString:(NSString *)dataFormatterString{
    NSString *dateString;
    NSDateFormatter *dataFormatter = [[NSDateFormatter alloc] init];
    dataFormatter.dateFormat = dataFormatterString;

    NSTimeInterval _interval=[timeInterval doubleValue] / 1000.0;
    NSDate *date = [NSDate dateWithTimeIntervalSince1970:_interval];
    dateString = [dataFormatter stringFromDate:date];

    return dateString;
}
5、日期轉換成時間戳

宣告方法:

-(double)getTimeIntervalWithDateString:(NSString *)dateString DataFormatterString:(NSString *)dataFormatterString;

實現該方法:

-(double)getTimeIntervalWithDateString:(NSString *)dateString DataFormatterString:(NSString *)dataFormatterString{
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

    [formatter setDateStyle:NSDateFormatterMediumStyle];

    [formatter setTimeStyle:NSDateFormatterShortStyle];

    [formatter setDateFormat:dataFormatterString];


    NSDate* date = [formatter dateFromString:dateString];
    //將日期轉換成時間戳
    double timeSp = [[NSNumber numberWithDouble:[date timeIntervalSince1970]] doubleValue]*1000;

    return timeSp;

}

二、將十六進位制顏色轉換成UIColor。

十六進位制顏色的轉換,我們也可以通過對UIColor寫一個類目來實現。
宣告方法:
+ (UIColor *)colorWithHex: (NSString *)color;
+ (UIColor *)colorWithHex: (NSString *)color alpha:(CGFloat)alpha;
實現方法:

 //顏色透明度預設為1
+ (UIColor *)colorWithHex:(NSString *)color {

    NSString *cString = [[color stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];

    // String should be 6 or 8 characters

    if ([cString length] < 6) {

        return [UIColor clearColor];

    }

    // strip 0X if it appears

    if ([cString hasPrefix:@"0X"])

        cString = [cString substringFromIndex:2];

    if ([cString hasPrefix:@"#"])

        cString = [cString substringFromIndex:1];

    if ([cString length] != 6)

        return [UIColor clearColor];

    // Separate into r, g, b substrings

    NSRange range;

    range.location = 0;

    range.length = 2;

    //r

    NSString *rString = [cString substringWithRange:range];

    //g

    range.location = 2;

    NSString *gString = [cString substringWithRange:range];

    //b

    range.location = 4;

    NSString *bString = [cString substringWithRange:range];

    // Scan values

    unsigned int r, g, b;

    [[NSScanner scannerWithString:rString] scanHexInt:&r];

    [[NSScanner scannerWithString:gString] scanHexInt:&g];

    [[NSScanner scannerWithString:bString] scanHexInt:&b];

    return [UIColor colorWithRed:((float) r / 255.0f) green:((float) g / 255.0f) blue:((float) b / 255.0f) alpha:1.0f];

}
//自定義顏色透明度
+ (UIColor *)colorWithHex:(NSString *)color alpha:(CGFloat)alpha{

    NSString *cString = [[color stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];

    // String should be 6 or 8 characters

    if ([cString length] < 6) {

        return [UIColor clearColor];

    }

    // strip 0X if it appears

    if ([cString hasPrefix:@"0X"])

        cString = [cString substringFromIndex:2];

    if ([cString hasPrefix:@"#"])

        cString = [cString substringFromIndex:1];

    if ([cString length] != 6)

        return [UIColor clearColor];

    // Separate into r, g, b substrings

    NSRange range;

    range.location = 0;

    range.length = 2;

    //r

    NSString *rString = [cString substringWithRange:range];

    //g

    range.location = 2;

    NSString *gString = [cString substringWithRange:range];

    //b

    range.location = 4;

    NSString *bString = [cString substringWithRange:range];

    // Scan values

    unsigned int r, g, b;

    [[NSScanner scannerWithString:rString] scanHexInt:&r];

    [[NSScanner scannerWithString:gString] scanHexInt:&g];

    [[NSScanner scannerWithString:bString] scanHexInt:&b];

    return [UIColor colorWithRed:((float) r / 255.0f) green:((float) g / 255.0f) blue:((float) b / 255.0f) alpha:alpha];

}

三、UITextField截斷字串。

UITextField寫一個類目LimitTextLength,指定長度,超過指定長度時截斷。
宣告方法:

-(void)limitTextLength:(NSInteger)length TextField:(UITextField *)textfield;

實現該方法:

-(void)limitTextLength:(NSInteger)length TextField:(UITextField *)textfield{
    NSString *toBeString = textfield.text;
    NSString *lang = self.textInputMode.primaryLanguage;
    if ([lang isEqualToString:@"zh-Hans"]) {
        UITextRange *selectedRang = [textfield markedTextRange];
        if (!selectedRang) {
            if (toBeString.length > length) {
                textfield.text = [toBeString substringToIndex:length];
            }
        }else{

        }

    }
    else{
        if (toBeString.length > length) {
            textfield.text = [toBeString substringToIndex:length];
        }
    }

}

如何使用該方法呢?
1.匯入建立好的類目UITextField+LimitTextLength.h後,我們建立一個UITextField,併為其註冊text發生變化的通知UITextFieldTextDidChangeNotification

   _textFieid=[[UITextField alloc] initWithFrame:CGRectMake(20, 240, self.view.frame.size.width-40, 50)];
    [self.view addSubview:_textFieid];
    _textFieid.layer.borderWidth=.5;
    _textFieid.delegate = self;
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldEditChanged:) name:UITextFieldTextDidChangeNotification object:_textFieid];

2、實現通知方法:

-(void)textFieldEditChanged:(NSNotification *)obj {
    UITextField *textField = (UITextField *)obj.object;
    if (textField == _textFieid) {
        [_textFieid limitTextLength:10 TextField:_textFieid];

    }
}

四、開啟手機qq與指定人聊天。

這個是通過web網頁的方法調起qq客戶端,需要配置LSApplicationQueriesSchemes

-(void)didClickQQButton{
    //需要在info.plist中增加LSApplicationQueriesSchemes陣列,然後新增item0,item0對應的值為mqqapi;增加item1,item1的值為mqq。
    NSString * [email protected]"";
    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"mqq://"]]) {
        UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectZero];

        NSURL * url=[NSURL URLWithString:[NSString stringWithFormat:@"mqq://im/chat?chat_type=wpa&uin=%@&version=1&src_type=web", QQNumber]];

        NSURLRequest *request = [NSURLRequest requestWithURL:url];

        webView.delegate = self;

        [webView loadRequest:request];

        [self.view addSubview:webView];

    }else{

        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"nil" message:@"對不起,您還沒安裝QQ" preferredStyle:UIAlertControllerStyleAlert];

        UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {

            return ;

        }];

        [alertController addAction:cancelAction];

        [self presentViewController:alertController animated:YES completion:nil];

    }

}

五、撥打電話。

-(void)didClickPhoneButton{
    NSString *[email protected]"";
    NSMutableString* str=[[NSMutableString alloc] initWithFormat:@"telprompt://%@", PhoneNumber];
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]  ];

}

demo

相關推薦

iOS常見通用一些方法集合定時更新歡迎補充

開發過程中,往往會用到一些常見又通用的方法,整個工程中我們可能需要多次用到,或者多個工程中會用到相同的方法。比如判斷手機號、郵箱的合法性,在登入或者註冊相關頁面,我們都需要用到相應的方法去判斷,而如果我們每次都寫一個判斷方法的話,程式碼會顯得尤其的冗餘,這時候我

Web自動化常用方法封裝定時更新

display isp 更新 after ive UC second 捕獲 expected 1.對於可能因某些原因延遲出現的瀏覽器Alert彈窗的點擊操作 public void waitAlertClick(){ WebDriverWait wait = new W

python中一些常用的函式定時更新

一、random函式 import random # 在1~20中隨機取一個數 print(random.choice(range(1, 20))) 9 # 在1~20中隨機取五個陣列成一個列表 print(random.choices(range(1, 20), k=5)) [3, 1

關於mybaties中的一些問題定時更新

select id="searchproductInfoByQuery" resultMap="ProductMap"> SELECT * FROM (select ROWNUM RN,A.* from PRODUCTINFO A where CATALOGID=#{que

ios開發一些有用的連結定期更新

UIActionSheet Subclass providing ability to set Font and Alignment for the message  https://gist.github.com/1688664

網絡工具定時更新

nbsp 跟蹤 補全 可能 bsp 如果 ice 指定 get mtr 實時跟蹤路由 tranceroute 跟蹤路由 trancepath 跟中路有,顯示節點到節點的時間 ftp 連接ftp get 下載文件,到當前目錄mget 同時下載多個文件put 上傳文

matlab常見函式總彙定時更新

1magic()隨機矩陣生成 2.eye(n)輸出n階單位方陣 3.rand(a,b)隨機矩陣 4.linspace(a,b,n)線性等分,a、b為等差數列的初值和終值,n是節點數 5.logspace(as,bf,n)等比數列 6.size(a)查驗矩陣維數 7.length(a)查驗向量

JavaScript的一些重要知識點定時更新

這裡記錄我學習JavaScript過程中覺得比較重要的知識點,會隨著學習不定時更新,歡迎收藏 目錄 1.重新宣告 JavaScript 變數 2.Undefined 和 Null 輸出結果: 3.宣告變數型別 4.JavaScript 變數的作用域   &n

Java集合偏向結構解析完善中

前言:這是我在面試的時候發現面試官很喜歡考Java集合底層結構,故而總結的,至此我的秋招仍沒有結束,只是將我理解的知識寫上去,許多地方閱讀可能有小問題。只能等招聘結束再修改了。 Java集合 fail-fast 機制是java集合(Collection)中的一種錯

把數字倒序的幾種方法定時更新c++

方法一:(最初級) 【問題描述】 把一個固定的5位數倒序。 【輸入形式】 從鍵盤輸入一個5位數。 【輸出形式】 倒序後的5位數。 【樣例輸入】 12345 【樣例輸出】 54321 解題思路: 題目已經說明是固定的5位數了,就把每位分解輸出就可以。 解題程式碼:

PHP常用方法定時更新

1、解決跨域問題 header('Access-Control-Allow-Origin:*');    //跨域 2、函式 array_column()的使用 $array = [ ['id'=>'99', 'name'=>'九十九']

Java經典案例定時更新

人類除了擅長頹廢,做什麼都不對 1. 實現金字塔效果 import java.util.Scanner; /** * @author caojiant

iOS 視訊音訊網路資源定時更新

視訊資源:https://wqs.jd.com/promote/superfestival/superfestival.mp4音訊資源:http://audio.xmcdn.com/group11/M01/93/AF/wKgDa1dzzJLBL0gCAPUzeJqK84Y53

IOS除錯技巧定時更新

Xcode是蘋果公司開發的一款IDE,用XCode寫Objective-C非常方便。而且XCode具有很強大的功能。我還正在學習的過程中,所以會將自己學習的感悟寫成部落格。關於XCode和IOS開發還有很多東西需要學習。所以部落格也會不定時進行更新。 今天要寫的是Xcode

的k個數、第k的數利用快排堆排序

快排:(若求top M個元素,則只需把下面的程式裡的k換乘n-M即可) //利用快排求最小的k個數,第k小的數 void GetLeastKNum(int *input,int n,int *output,int k) { if(input==NU

Android一些瑣碎知識點定時更新

一、@id與@+id的區別 @id : 引用現有的資源,類似@string  這樣的做法易於統一管理。     具體用法: <resources> <item name="topview" type="id"/> <item

java一一些經典技術問題定期更新

一. Spring MVC 如何接受並處理一個請求的? 兩種方法 1、web.xml          首先我們會在 web.xml 中註冊一個 DispatcherServlet ,並令這個 servlet 接收所有的請求,專案啟動後Spring會掃描配置檔案,根據配置載

設計模式11——模板方法模式Template Method Pattern行為型

1.概述 使用設計模式可以提高程式碼的可複用性、可擴充性和可維護性。 模板方法模式(Template Method Pattern)屬行為型,在一個方法中定義一個演算法骨架,而將一些步驟延遲到子類中,使子類可以不改變演算法結構即可重定義演算法的某些特定步驟。

微信程序踩坑定時更新

變化 .net 需要 我們 應該 重聲明 比較 abcd 不一定 emmmm,覺得自己小程序太薄弱了,所以還是找個東西練手,不過還是要感謝某大神提供的“扒小程序”的方法,雖然不是說拿下來就能用,但是作為仿小程序來說,我要的圖片素材,頁面名稱都有了.

JS_一些方法總結

inpu onclick事件 function 總結 body cli type nbsp 方法總結 1.js中onclick事件同時調用兩個方法 用分號隔開即可,比如 <input type="button" onclick="a();b();" value="