iOS 网易彩票-6设置模块三(常用小功能)
该篇文章中,用到很多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][];
} @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 = @"";
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 = @"";
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 = @[@"", @""];
// 设置代理
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:@[@"55866@qq.com"]];
// 设置抄送人列表
[vc setCcRecipients:@[@"1234@qq.com"]];
// 设置密送人列表
[vc setBccRecipients:@[@"56789@qq.com"]]; // 添加附件(一张图片)
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"修饰符

__weak typeof(self) selfVc = self;
系统源码下载:点击下载
iOS 网易彩票-6设置模块三(常用小功能)的更多相关文章
- iOS 网易彩票-4设置模块一
概述 基本上,每一款APP都有相应的设置模块.怎么设置才能更灵活和通用呢,这也是大家一直思考的.下面说说在网易彩票中,设置模块的设置思想. 基本上有三种方案: static cell(呆板,完全没有动 ...
- iOS 网易彩票-5设置模块二
产品推荐 产品推荐使用的是UICollectionView控件,UICollectionView 和 UICollectionViewController 类是iOS6 新引进的API,用于展示集合视 ...
- iOS常用小功能
CHENYILONG Blog 常用小功能 技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong ...
- iOS 常用小功能 总结
常用小功能 iOS中的很多小功能都是非常简单的,几行代码就搞定了,比如打电话.打开网址.发邮件.发短信等 打电话 方法一(不被采用): 拨号之前会弹框询问用户是否拨号,拨完后能自动回到原应用 NSUR ...
- iOS 网易彩票-1框架搭建
仿网易彩票,最终要做成的效果如下: 一.分层搭建 1.新建一个项目,Lottery.只支持7.1以上坚屏. 2.将素材全部图片全部拉到相应的文件夹里. 3.选中Lottery--右键Show in F ...
- android 常用小功能(第二版)
经历过一段岁月,转眼2013的半年都过去了,第二版整理好的小功能,答应大家发布的,直到今日,终于和大家相见了,第二版没有第一版多,大家也可以去参考第一版的内容,希望大家使用愉快! 目录: 1.获取当前 ...
- iOS 网易彩票-3常见设置
Navigation导航设置 为了统一管理导航控制器,需要自定义导航控制器MJNavigationController,继承于UINavigationController.分别设置5个Navigati ...
- iOS 网易彩票-2框架搭建-代码重构
在上一篇中,我们基本已经把整个框架都搭建出来了,下面进行代码重构一下. 思路: 导航按钮,按下时,会变灰,那是系统自带了,通过自定义UIButton,实现按下按钮立即切换效果. MJTabBarCon ...
- iOS 通信常用小功能
打电话 a.最简单最直接的方式:直接跳到拨号界面 NSURL *url = [NSURL URLWithString:@"tel://10010"]; [[UIApplicatio ...
随机推荐
- sublime--package control的配置与插件安装
自动配置: 准备一个安装好的 sublime text .这里我的是版本3: 1. 快捷键:ctrl + ~:调出控制台,因为我的是版本3,所以在控制台中输入下边这段代码: import urllib ...
- 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二十:SDRAM模块③ — 页读写 α
实验二十:SDRAM模块③ — 页读写 α 完成单字读写与多字读写以后,接下来我们要实验页读写.丑话当前,实验二十的页读写只是实验性质的东西,其中不存在任何实用价值,笔者希望读者可以把它当成页读写的热 ...
- Windows系统的文件浏览器如何触发刷新
最近开发一个Drive程序,修改注册表添加System Folder Drive后需要通知已打开的每个文件浏览器刷新.最初选择获取对应窗体的句柄并发送WM_KEYDOWN.WM_KEYUP的VK_F5 ...
- 状态机FSM
参考: 百度-有限状态机 博客园-有限状态机FSM详解及其实现 CSDN-状态机FSM代码框架 腾讯开源项目behaviac 占坑,待编辑...
- Microsoft Office Enterprise 2007 在安装过程中出错的解决方法
今天笔者在使用PowerPoint 2007打开一个ppt的内嵌的excel表格时报如下错误: 无法找到 服务器应用程序.源文件.和项目,或返回的未知错误.请重新安装服务程序 然后就先把ppt文件发给 ...
- Css控制网页变灰
兼容IE chrome Firefox..... html{ filter:grayscale(%); -moz-filter:grayscale(%); -o-filter:grayscale(%) ...
- 密码强度demo(弱中强)
<!doctype html> <html> <head> <script src="http://ajax.microsoft.com/ajax/ ...
- em 单位
借 Lea verou 的话: 当某些值相互依赖时,应该把它们的相互关系用代码表达出来. 通常情况下,我们会希望字号和其他尺寸能够跟父元素的字号建立关联,此时em就很好的表达了这种关系. 在CSS V ...
- zTree实现节点修改的实时刷新
一.应用场景 在实际应用中会遇到动态操作树各节点的需求,在增加树节点后如何实时动态刷新树就十分有必要了. 二.项目实践 比如要在test1234节点下新建子节点,首先要选中test1234节点,添 ...
- ELK(使用RPM包安装配置ELK)
1,安装环境查看 2,下载rmp包 下载地址:https://www.elastic.co/cn/downloads 分别下载最新rmp包 elasticsearch-6.2.4.rpm logsta ...