iOS中小功能開發(fā)

iOS中的很多小功能都是非常簡單的,幾行代碼就搞定了,比如打電話、打開網(wǎng)址、發(fā)郵件、發(fā)短信等

打電話

第一種方式

NSURL *url = [NSURL URLWithString:@"tel://10010"];   // iOS 10以前直接跳到撥號界面,打完電話不會回到原應(yīng)用
NSURL *url = [NSURL URLWithString:@"telprompt://10010"];iOS 10以前在撥號之前會詢問用戶是否撥號,撥完后會回到原應(yīng)用
iOS 10以后,上述兩種方式相同,在撥號之前都會詢問用戶是否撥號,撥完號之后會回到原應(yīng)用

ios10之后 openURL:已廢棄,可用下面的方法替換,注意 options:@{UIApplicationOpenURLOptionsSourceApplicationKey : @YES} //參數(shù)是一個字典

NSURL *url = [NSURL URLWithString:@"tel://10010"];
[[UIApplication sharedApplication] openURL:url options:@{UIApplicationOpenURLOptionsSourceApplicationKey : @YES} completionHandler:^(BOOL success) {
        // 成功回調(diào)
        if(!success){
            //失敗回調(diào)
        UIAlertController *aler = [UIAlertController alertControllerWithTitle:@"不能完成跳轉(zhuǎn)" message:@"請確認(rèn)App已經(jīng)安裝" preferredStyle:UIAlertControllerStyleAlert];
            
        UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"確定"style:UIAlertActionStyleCancel handler:nil];
            
        [aler addAction:cancelAction];
            
        [self  presentViewController:aler animated:YES completion:nil];
            
        }else{
            
            [self dismissViewControllerAnimated:YES completion:nil];
            
        }

    }];

第二種方式

創(chuàng)建一個UIWebView來加載url,撥打完之后會自動跳到原應(yīng)用

if (_webView == nil) {
    _webView = [[UIWebView alloc] initWithFrame:CGRectZero];
//注意:這個webView千萬不要設(shè)置尺寸,不然會擋住其他界面,他只是用來打電話,不需要顯示

}
[_webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"tel://10010"]]];

發(fā)短信

第一種方法

直接跳到發(fā)短信的界面,但是不能指定短信的內(nèi)容而且不能返回原應(yīng)用

NSURL *url = [NSURL URLWithString:@"sms://10010"];
    [[UIApplication sharedApplication] openURL:url options:@{UIApplicationOpenURLOptionsSourceApplicationKey : @YES} completionHandler:^(BOOL success) {
        
    }];

第二種方式

若想指定短信內(nèi)容,那就得使用MessageUI框架

// 包含主頭文件
#import <MessageUI/MessageUI.h>

- (IBAction)sendMessageTwo {
    // 顯示發(fā)短信的控制器
    MFMessageComposeViewController *vc = [[MFMessageComposeViewController alloc] init];
    // 設(shè)置短信內(nèi)容
    vc.body = @"Hello China Unicom ?";
    // 設(shè)置收件人列表
    vc.recipients = @[@"10010", @"02010010"];
    // 設(shè)置代理,并遵守MFMessageComposeViewControllerDelegate協(xié)議
    vc.messageComposeDelegate = self;
    // 顯示控制器
    [self presentViewController:vc animated:YES completion:nil];
}

#pragma mark MFMessageComposeViewControllerDelegate 的代理方法
/**
 當(dāng)短信界面關(guān)閉的時候調(diào)用

 @param controller 發(fā)送短信控制器
 @param result 發(fā)送結(jié)果回調(diào)
 */
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result{
    
    // 關(guān)閉短信界面
    [controller dismissViewControllerAnimated:YES completion:nil];
    if (result == MessageComposeResultCancelled) {
        NSLog(@"取消發(fā)送");
    } else if (result == MessageComposeResultSent) {
        NSLog(@"已經(jīng)發(fā)出");
    } else {
        NSLog(@"發(fā)送失敗");
    }
    
}

發(fā)郵件

第一種方法

使用自帶的郵件客戶端,發(fā)完之后不會回到原應(yīng)用

- (IBAction)sendAddressOne {
    NSURL *url = [NSURL URLWithString:@"mailto://dengerxuan@163.com"];
    [[UIApplication sharedApplication] openURL:url options:@{UIApplicationOpenURLOptionsSourceApplicationKey : @YES} completionHandler:^(BOOL success) {
        if(success){
            NSLog(@"發(fā)送成功");
        }else{
            NSLog(@"發(fā)送失敗");
        }
    }];
}

第二種方法

使用MessageUI框架

// 包含頭文件
#import <MessageUI/MessageUI.h>

#pragma mark - 在應(yīng)用內(nèi)發(fā)送郵件
//激活郵件功能
- (IBAction)sendAddressTwo {
 
    Class mailClass = (NSClassFromString(@"MFMailComposeViewController"));
    if (!mailClass) {
        [self alertWithMessage:@"當(dāng)前系統(tǒng)版本不支持應(yīng)用內(nèi)發(fā)送郵件功能,您可以使用mailto方法代替"];
        return;
    }
    if (![mailClass canSendMail]) {
        [self alertWithMessage:@"用戶沒有設(shè)置郵件賬戶"];
        return;
    }
    [self displayMailPicker];
}
- (void)displayMailPicker{
    // 發(fā)送郵件控制器
    MFMailComposeViewController *mailPicker = [[MFMailComposeViewController alloc] init];
    // 設(shè)置代理
    mailPicker.mailComposeDelegate = self;
    
    // 設(shè)置主題
    [mailPicker setSubject: @"eMail主題"];
    // 添加收件人
    NSArray *toRecipients = [NSArray arrayWithObject: @"dengerxuan@163.com"];
    [mailPicker setToRecipients: toRecipients];
    // 添加抄送
    NSArray *ccRecipients = [NSArray arrayWithObjects:@"dengerxuan@163.com", @"1158035983@qq.com", nil];
    [mailPicker setCcRecipients:ccRecipients];
    // 添加密送
    NSArray *bccRecipients = [NSArray arrayWithObjects:@"1158035983@qq.com", nil];
    [mailPicker setBccRecipients:bccRecipients];
    // 添加一張圖片
    UIImage *addPic = [UIImage imageNamed: @"girl.png"];
    NSData *imageData = UIImagePNGRepresentation(addPic);            // png
    // 關(guān)于mimeType:http://www.iana.org/assignments/media-types/index.html
    [mailPicker addAttachmentData: imageData mimeType: @"" fileName: @"Icon.png"];
    // 添加一個pdf附件
    NSString *file = [[NSBundle mainBundle] pathForResource:@"iOS開發(fā)進階(唐巧).pdf" ofType:nil];
    // NSString *file = [self fullBundlePathFromRelativePath:@"iOS開發(fā)進階(唐巧).pdf"];  // 此方法廢棄
    NSData *pdf = [NSData dataWithContentsOfFile:file];
    [mailPicker addAttachmentData: pdf mimeType: @"" fileName: @"iOS開發(fā)進階(唐巧).pdf"];
    // 設(shè)置正文
    NSString *emailBody = @"<font color='red'>eMail</font> 正文";
    [mailPicker setMessageBody:emailBody isHTML:YES];
    //    [self presentModalViewController: mailPicker animated:YES];
    [self presentViewController:mailPicker animated:YES completion:nil];
}

/**
 抽取提示框彈出的方法

 @param message 提示信息
 */
- (void)alertWithMessage:(NSString *)message{
    UIAlertController *alertVc = [UIAlertController alertControllerWithTitle:@"提示" message:message preferredStyle:UIAlertControllerStyleAlert];
    [alertVc addAction:[UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
        NSLog(@"點擊了確定按鈕");
    }]];
     [self presentViewController:alertVc animated:YES completion:nil] ;
}

#pragma mark MFMailComposeViewControllerDelegate 的代理方法
/**
 郵件發(fā)送后的代理方法回調(diào)

 @param controller 發(fā)送郵件的控制器
 @param result 發(fā)送結(jié)果
 @param error 發(fā)送失敗
 */
- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
    
    // 關(guān)閉郵件界面
    [controller dismissViewControllerAnimated:YES completion:nil];
    if (result == MFMailComposeResultCancelled) {
        NSLog(@"取消發(fā)送");
    } else if (result == MFMailComposeResultSent) {
        NSLog(@"已經(jīng)發(fā)出");
    } else {
        NSLog(@"發(fā)送失敗");
    }
}

打開其他常見文件

如果想打開一些常見文件,比如html、txt、PDF、PPT等,都可以使用UIWebView打開

只需要告訴UIWebView文件的URL即可

至于打開一個遠程的共享資源,比如http協(xié)議的,也可以調(diào)用系統(tǒng)自帶的Safari瀏覽器:

NSURL *url = [NSURL URLWithString:@”http://www.baidu.com"];
[[UIApplication sharedApplication] openURL:url options:@{UIApplicationOpenURLOptionsSourceApplicationKey : @YES} completionHandler:^(BOOL success) {}

應(yīng)用間跳轉(zhuǎn)

有時候需要在本應(yīng)用中打開其他的應(yīng)用,比如,從A應(yīng)用中跳到B應(yīng)用中

  • 首先B應(yīng)用要有自己的URL地址(在B的Info.plist文件中配置)

abc.png

此時B的URL為 mj:// ios.itcast.com

  • 接著在A應(yīng)用中使用UIApplication來完成跳轉(zhuǎn)
- (IBAction)openAnotherApp {
    NSURL *url = [NSURL URLWithString:@"mj://ios.itcast.com"];
    [[UIApplication sharedApplication] openURL:url options:@{UIApplicationOpenURLOptionsSourceApplicationKey : @YES} completionHandler:^(BOOL success) {
        if(!success){
            //失敗回調(diào)
            UIAlertController *aler = [UIAlertController alertControllerWithTitle:@"不能完成跳轉(zhuǎn)" message:@"請確認(rèn)App已經(jīng)安裝" preferredStyle:UIAlertControllerStyleAlert];
            
            UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"確定"style:UIAlertActionStyleCancel handler:nil];
            
            [aler addAction:cancelAction];
            
            [self  presentViewController:aler animated:YES completion:nil];
            
        }else{
            
            [self dismissViewControllerAnimated:YES completion:nil];
            
        }
    }];
}

應(yīng)用評分

為了提高應(yīng)用的用戶體驗,經(jīng)常需要邀請用戶對應(yīng)用進行評分,應(yīng)用評分無非就是跳轉(zhuǎn)到AppStore展示自己的應(yīng)用,然后由用戶自己撰寫評論,如何跳轉(zhuǎn)到AppStore,并且展示自己的應(yīng)用

NSString *appid = @"您app的appid”;

NSString *str = [NSString stringWithFormat:

                 @"itms-apps://itunes.apple.com/cn/app/id%@?mt=8", appid];

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:str ]options:@{UIApplicationOpenURLOptionsSourceApplicationKey : @YES} completionHandler:^(BOOL success) {
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,362評論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,577評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,486評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,852評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,600評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,944評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,944評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,108評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,652評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,385評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,616評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,111評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,798評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,205評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,537評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,334評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,570評論 2 379

推薦閱讀更多精彩內(nèi)容