iOS 网易彩票-5设置模块三(常用小功能)

该篇文章中,用到很多iOS开发过程中常用的小功能,当前只是将这些功能集成到网易彩票的设置中。iOS-常用小功能介绍,请参考我的另一篇文章:

iOS 常用小功能 总结:http://www.cnblogs.com/jys509/p/4805030.html

关于

效果图

思路分析:

  • 使用self.tableView.tableHeaderView 自定义组头部,通过加载xib来实现
  • 评分支持,使用【iOS 常用小功能 总结】中“应用评分”小功能
  • 客户电话,使用【iOS 常用小功能 总结】中“打电话”来实现

1.新建一个xib.看效果图,具体操作就不演示了。

相关代码 MJAboutHeaderView.h:

#import "MJAboutHeaderView.h"

@implementation MJAboutHeaderView

+(instancetype)headerView
{
    return [[NSBundle mainBundle] loadNibNamed:@"MJAboutHeaderView" owner:nil options:nil][0];
}

@end

2.新建一个控制器MJAboutViewController,继承于MJBaseSettingViewController

在里面加载xib,并实现应用评分和打电话功能。

#import "MJAboutViewController.h"
#import "MJSettingArrowItem.h"
#import "MJSettingGroup.h"

@interface MJAboutViewController ()
//@property (nonatomic, strong) UIWebView *webView;
@end

@implementation MJAboutViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIWebView *webView = [[UIWebView alloc] init];
    webView.frame = CGRectZero;
    [self.view addSubview:webView];

    // 1.具体数据
    MJSettingItem *mark = [MJSettingArrowItem itemWithTitle:@"评分支持" destVcClass:nil];
    mark.option = ^{
        NSString *appid = @"725296055";
        NSString *str = [NSString stringWithFormat:@"itms-apps://itunes.apple.com/cn/app/id%@?mt=8", appid];
        NSURL *url = [NSURL URLWithString:str];
        [[UIApplication sharedApplication] openURL:url];
    };

    MJSettingItem *call = [MJSettingArrowItem itemWithTitle:@"客户电话" destVcClass:nil];
    call.subtitle = @"10010";
    call.option = ^{
        NSURL *url = [NSURL URLWithString:@"tel://10010"];
        [webView loadRequest:[NSURLRequest requestWithURL:url]];
    };

    MJSettingGroup *group = [[MJSettingGroup alloc] init];
    group.items = @[mark, call];
    [self.data addObject:group];

    // 2.header
    self.tableView.tableHeaderView = [UIButton buttonWithType:UIButtonTypeContactAdd];
}
@end

分享

效果图

MJShareViewController.h

#import "MJShareViewController.h"
#import "MJSettingArrowItem.h"
#import "MJSettingGroup.h"
#import <MessageUI/MessageUI.h>

@interface MJShareViewController () <MFMessageComposeViewControllerDelegate, MFMailComposeViewControllerDelegate>

@end

@implementation MJShareViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    //block里使用了强指针self,为了避免循环引用导致的内存泄露,要使用弱指针
    __unsafe_unretained typeof(self) selfVc = self;

    MJSettingItem *sina = [MJSettingArrowItem itemWithIcon:@"WeiboSina" title:@"新浪微博" destVcClass:nil];
    MJSettingItem *sms = [MJSettingArrowItem itemWithIcon:@"SmsShare" title:@"短信分享" destVcClass:nil];
    sms.option = ^{
        if (![MFMessageComposeViewController canSendText]) return;

        MFMessageComposeViewController *vc = [[MFMessageComposeViewController alloc] init];
        // 设置短信内容
        vc.body = @"吃饭了没?";
        // 设置收件人列表
        vc.recipients = @[@"10010", @"02010010"];
        // 设置代理
        vc.messageComposeDelegate = selfVc;

        // 显示控制器
        [selfVc presentViewController:vc animated:YES completion:nil];
    };

    MJSettingItem *mail = [MJSettingArrowItem itemWithIcon:@"MailShare" title:@"邮件分享" destVcClass:nil];
    mail.option = ^{
        // 不能发邮件
        if (![MFMailComposeViewController canSendMail]) return;

        MFMailComposeViewController *vc = [[MFMailComposeViewController alloc] init];

        // 设置邮件主题
        [vc setSubject:@"会议"];
        // 设置邮件内容
        [vc setMessageBody:@"今天下午开会吧" isHTML:NO];
        // 设置收件人列表
        [vc setToRecipients:@[@"[email protected]"]];
        // 设置抄送人列表
        [vc setCcRecipients:@[@"[email protected]"]];
        // 设置密送人列表
        [vc setBccRecipients:@[@"[email protected]"]];

        // 添加附件(一张图片)
        UIImage *image = [UIImage imageNamed:@"lufy.png"];
        NSData *data = UIImagePNGRepresentation(image);
        [vc addAttachmentData:data mimeType:@"image/png" fileName:@"lufy.png"];

        // 设置代理
        vc.mailComposeDelegate = selfVc;
        // 显示控制器
        [selfVc presentViewController:vc animated:YES completion:nil];
    };

    MJSettingGroup *group = [[MJSettingGroup alloc] init];
    group.items = @[sina, sms, mail];
    [self.data addObject:group];
}

/**
 *  短信 点击取消按钮会自动调用
 */
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
{
    [controller dismissViewControllerAnimated:YES completion:nil];
}

/**
 *  邮件 击取消按钮会自动调用
 */
- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
    [controller dismissViewControllerAnimated:YES completion:nil];
}

- (void)dealloc
{
    NSLog(@"----MJShareViewController----");
}
@end

Block内循环引用导致的内存泄露

在block代码内,使用了强指针指向block所在的对象(例如self),导致循环引用,不能释放资源

将block内的对象引用设置为弱指针:使用"__weak"修饰符

注意:也不要使用强指针访问对象的属性

block内的对象引用设置为弱指针,除了上面的使用 __unsafe_unretained

__weak typeof(self) selfVc = self;

系统源码下载:点击下载

时间: 2024-10-12 12:43:59

iOS 网易彩票-5设置模块三(常用小功能)的相关文章

iOS常用小功能的实现

iOS应用开发中有许多非常实用的小功能, 这些小功能的实现也非常的简单, 本文将这些小功能汇总,用于备忘. 1. 打电话功能的实现 实现打电话功能的方式有多种,其中最好的方式如下: //利用UIWebView打电话 if (_webView == nil) { //WebView不需要显示,只需要实现打电话功能 _webView = [[UIWebView alloc] initWithFrame:CGRectZero]; } [_webView loadRequest:[NSURLReques

iOS 常用小功能 总结

常用小功能 iOS中的很多小功能都是非常简单的,几行代码就搞定了,比如打电话.打开网址.发邮件.发短信等 打电话 方法一(不被采用): 拨号之前会弹框询问用户是否拨号,拨完后能自动回到原应用 NSURL *url = [NSURL URLWithString:@"telprompt://10010"]; [[UIApplication sharedApplication] openURL:url]; 缺点 因为是私有API,所以可能不会被审核通过 方法二(推荐使用): 创建一个UIWe

常用小功能总结-不定时更新

Windows下使用eclipse开发android应用,搭配好模拟器等环境. 1.eclipse智能提示设置. 1)Windows→Preferences→Java→Editor→Content Assist 把200毫秒的时间改成20 2)Windows→Preferences→Java→Editor→Content Assist 然后修改:Auto Activation triggers for java的默认值“.”为".abc". 接着File→Export→Preferen

iOS UI进阶-1.2网易彩票常见设置

Navigation导航设置 为了统一管理导航控制器,需要自定义导航控制器MJNavigationController,继承于UINavigationController.分别设置5个Navigation的控制器Class为此控制器. 白色状态栏 统一背景头部导航栏 设置所有Navigation导航栏字体颜色 二级页面隐藏底部导航条 1.白色状态栏.使用application管理状态栏 设置不使用控制器控制状态栏 在MJAppDelegate中设置: - (BOOL)application:(U

iOS 通信常用小功能

打电话 a.最简单最直接的方式:直接跳到拨号界面 NSURL *url = [NSURL URLWithString:@"tel://10010"]; [[UIApplication sharedApplication] openURL:url]; 缺点 电话打完后,不会自动回到原应用,直接停留在通话记录界面 b.拨号之前会弹框询问用户是否拨号,拨完后能自动回到原应用 NSURL *url = [NSURL URLWithString:@"telprompt://10010&

Redis学习——常用小功能

一.慢查询分析(查询日志:所谓慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阀值,就将这条命令的相关信息(例如:发生时间,耗时,命令的详细信息)记录下来,Redis也提供了类似的功能.) Redis客户端执行一条命令分为如下4个部分:1)发送命令  2)命令排队  3)命令执行  4)返回结果 (需要注意,慢查询只统计步骤3的时间,所以没有慢查询并不代表客户端没有超时问题.) 1.慢查询参数配置: ·预设阀值怎么设置?(slowlog-log-slower-than) (它的

iOS学习过程中遇到的一些有用的小功能(持续更新)

这些是我在目前学习UI过程中遇到的一些感觉以后开发会用得比较多的功能. 先把这些收录进来,在接下来的学习过程中如果发现还有用的功能会继续更新下来 因为还是新手,如果有哪些方面有问题请留言告诉我,我会改正 1. //点击键盘上return键后结束编辑,收回底键盘 在.m文件里复写以下方法(要先在头文件里引入协议:UITextFieldDelegate) - (BOOL)textFieldShouldReturn:(UITextField *)textField { [textField resig

iOS学习过程中遇到的一些有用的小功能(8/13更新)

这些是我在目前学习UI过程中遇到的一些感觉以后开发会用得比较多的功能. 先把这些收录进来,在接下来的学习过程中如果发现还有用的功能会继续更新下来 因为还是新手,如果有哪些方面有问题请留言告诉我,我会改正 1. //点击键盘上return键后结束编辑,收回底键盘 在.m文件里复写以下方法(要先在头文件里引入协议:UITextFieldDelegate) - (BOOL)textFieldShouldReturn:(UITextField *)textField { [textField resig

iOS打电话、发短信、发邮件功能开发

本文转载至 http://www.lvtao.net/ios/506.html 今天把APP里常用小功能 例如发短信.发邮件.打电话.全部拿出来简单说说它们的实现思路. 1.发短信实现打电话的功能,主要二种方法,下面我就分别说说它们的优缺点.1.1.发短信(1)——URL // 直接拨号,拨号完成后会停留在通话记录中1.方法: NSURL *url = [NSURL URLWithString:@"sms://10010"]; [[UIApplication sharedApplica