作者: xiao, yanzi

苹果iOS捷径(快捷指令)自动填写表单

苹果iOS用户可以通过捷径(快捷指令)快速完成表单填写以提高工作效率。本文主要介绍如何通过捷径(快捷指令)调用 JavaScript 在网页运行的方式快速填写表单。

效果展示:

%title插图%num

捷径(快捷指令)在网页上运行JavaScript 脚本基本格式:

var result = [];

// JavaScript代码

// 调用 Completion 以完成
completion(result);

以疫情期间在校生出入校园申请表为例:

%title插图%num

首先分析表单所需要填写的信息类型,在本例中,类型主要有文本框、单选按钮、时间选择器:

1. 文本框

%title插图%num

对于文本框,我们可以通过定位文本框对应id,通过定义value的形式为文本框赋值。

document.getElementById(‘ZY’).value=”需要填写的内容”;

2. 单选按钮

%title插图%num

面对单选按钮,改变选择器样式并不能将内容*终插入*后提交的表单中,我们需要用到JavaScript的点击动作。

var event = new MouseEvent(‘click’);

var XQ_click = document.getElementsByClassName(‘van-radio van-radio–horizontal’)[1];

XQ_click.dispatchEvent(event);

基本逻辑为:定义点击事件(MouseEvent继承自UIEvent)——定位选择按钮——实现点击。

关于定位选择按钮,这里再强调一下,对于没有独立id的选择按钮,可以通过其在ClassName中的具体位置序号予以定位。

3. 时间选择器

%title插图%num

时间选择器数据的填写,我们可以直接使用捷径(快捷指令)的 当前日期功能:

%title插图%num

document.getElementById(‘JTSDJS’).value=”当前日期”;

%title插图%num

2 在捷径(快捷指令)中将出发时间的当前日期参数格式设置为 yyyy-MM-dd HH:mm,返校时间的当前日期参数格式设置为 yyyy-MM-dd 23:00,即表示出发时间为填表时间,返校时间为当天的23:00

%title插图%num

值得注意的是:

%title插图%num

这个表单内的元素全部位于id为formIframe的iframe内,因此在定位表单元素前还需要定位表单:

parent.document.getElementById(“formIframe”)

完整脚本:
var result = [];

parent.document.getElementById(“formIframe”).contentWindow.document.getElementById(‘ZY’).value=”需要填写的内容”;
parent.document.getElementById(“formIframe”).contentWindow.document.getElementById(‘NJ’).value=”需要填写的内容”;
parent.document.getElementById(“formIframe”).contentWindow.document.getElementById(‘BJ’).value=”需要填写的内容”;
parent.document.getElementById(“formIframe”).contentWindow.document.getElementById(‘LXFS’).value=”需要填写的内容”;
parent.document.getElementById(“formIframe”).contentWindow.document.getElementById(‘SZSS’).value=”需要填写的内容”;
parent.document.getElementById(“formIframe”).contentWindow.document.getElementById(‘QJWCSY’).value=”需要填写的内容”;
parent.document.getElementById(“formIframe”).contentWindow.document.getElementById(‘JTGJD’).value=”步行”;
parent.document.getElementById(“formIframe”).contentWindow.document.getElementById(‘JKZK’).value=”健康”;
parent.document.getElementById(“formIframe”).contentWindow.document.getElementById(‘JTSDKS’).value=”当前日期”;
parent.document.getElementById(“formIframe”).contentWindow.document.getElementById(‘JTSDJS’).value=”当前日期”;

//MouseEvent继承自UIEvent
var event = new MouseEvent(‘click’);

var XQ_vant_click = parent.document.getElementById(“formIframe”).contentWindow.document.getElementsByClassName(‘van-radio van-radio–horizontal’)[1];
var ZXTY_vant_click = parent.document.getElementById(“formIframe”).contentWindow.document.getElementsByClassName(‘van-radio van-radio–horizontal’)[2];
var SFLJ_vant_click = parent.document.getElementById(“formIframe”).contentWindow.document.getElementsByClassName(‘van-radio van-radio–horizontal’)[5];

XQ_vant_click.dispatchEvent(event);
ZXTY_vant_click.dispatchEvent(event);
SFLJ_vant_click.dispatchEvent(event);

// 调用 Completion 以完成
completion(result);

至此,本文也就进入尾声了。希望本文能够起到抛砖引玉之效,也欢迎大家的批评交流。

ios 跳转到支付宝_使用iOS快捷指令执行快捷操作之1——每天早起定时打开蚂蚁森林…

写在前面——iOS快捷指令是新版本iOS所具有的功能,图标是下面这个样子:

%title插图%num

如果你的iOS设备找不到这个功能,可能这个功能被你屏蔽了,或者iOS版本不够,请升级你的iOS系统。

iOS快捷指令,我个人的感觉,有点类似于微软操作系统中早已存在的批处理文件,它可以执行一系列操作,所以这些日子我在琢磨它的使用方法以充分利用这个功能。于是我琢磨出来两个小快捷指令,分享给大家,抛砖引玉吧,大伙一起享受这个app的便捷之处。

我相信很多人都在玩支付宝的蚂蚁森林,我也在玩,而且我知道有很多人为了不让自己的能量被别人抢走,甚至设置了闹钟来提醒自己收能量球,我也是这么做的。尤其是每天早起7点来钟生成的前一天计步生成的能量,由于是支付宝每天定时定点生成的(每个人的时间都不一样,但是都是集中在7-8点,而且对于一个人来讲时间每天都是一样的),就特别适合定一个每天的闹钟来提醒自己收能量,还能顺便搜刮一下好友的能量,非常的值得。我现在每天能通过收取别人能量,每天就能抢到别人的500克以上的能量(被我天天抢能量的朋友们别生气哈 )!比自己辛辛苦苦走路计步容易多了!

那么iOS快捷指令就可以为你响完闹钟以后自动打开支付宝的蚂蚁森林,具体操作如下:

1、首先弄清楚你的蚂蚁森林能量每天是7点几分成熟,设置一个成熟之前一分钟之内的闹钟,起好名字,比如“蚂蚁森林”,如图:

%title插图%num
2、打开iOS快捷指令app,选择底部“自动化”,再选择右上角“+”,新建快捷指令,如图箭头所示:

%title插图%num
3、在弹出的窗口中选择“创建个人自动化”

%title插图%num
4、新自动化列表里选择“闹钟”-“停止时”-“现有”-找到那个闹钟,比如刚才的名字“蚂蚁森林”-右上角“完成”:

%title插图%num

%title插图%num

%title插图%num
5、返回之后变成这个样子,选择“下一步”:

%title插图%num
6、选择“添加操作”-操作列表里找到“来蚂蚁森林收能量”-“下一步”-再“下一步”-关闭“运行前询问”-“完成”:

%title插图%num

%title插图%num

%title插图%num

%title插图%num

这样这个快捷指令就会在每天提醒你收能量之后自动打开支付宝,并且直接跳转到蚂蚁森林界面啦!当你看见天天你的蚂蚁森林能量球只有一分钟就成熟,是不是很高兴呢?

注意,在响闹钟的提醒出现以后不要忽略这个提醒,而是点开它,当然如果有锁屏密码和支付宝需要解锁识别身份,还是不能跳过的,但是不会中断运行这个快捷指令!

IOS快捷指令的用法(快捷指令库使用方法)

1、打开快捷指令、找到快捷指令中心,随便添加一个系统给的快捷指令;然后点击我的快捷指令,点击刚加入的快捷指令运行一下。

%title插图%num

2、打开设置,搜索快捷指令,勾上允许不信任的快捷指令;

%title插图%num

3、用Safari浏览器搜索快捷指令库,从中找到自己想要的加入到快捷指令中心即可(点击获取捷径)。

%title插图%num

4、可以使用自动化功能运行此指令,比如NFC,或者打开某个应用时;做法:点击自动化—>创建新的自动化—>下一步—>然后搜索快捷指令—>运行我的快捷指令—>点击框中的快捷指令添加即可。

%title插图%num

iOS开发苹果支持中文字体,和使用字体

1.中文字体

转自:https://zhidao.baidu.com/question/1239016138772367339.html

ios7英文字体:Helvetica 下的各种系统,例如Helvetica Neue等,细究起来很烦,不同的地方用不同的系统,但都是Helvetica家族下的
ios7中文字体:STHeitiSC-Light 黑体-简

2.苹果使用字体
转自:http://blog.csdn.net/onlyou930/article/details/7422097
label.font  =  [UIFont fontWithName: @” Arial-BoldItalicMT ”  size: 24 ];

字体名如下:

Font Family: American Typewriter
Font: AmericanTypewriter
Font: AmericanTypewriter-Bold

Font Family: AppleGothic
Font: AppleGothic

Font Family: Arial
Font: ArialMT
Font: Arial-BoldMT
Font: Arial-BoldItalicMT
Font: Arial-ItalicMT

Font Family: Arial Rounded MT Bold
Font: ArialRoundedMTBold

Font Family: Arial Unicode MS
Font: ArialUnicodeMS

Font Family: Courier
Font: Courier
Font: Courier-BoldOblique
Font: Courier-Oblique
Font: Courier-Bold

Font Family: Courier New
Font: CourierNewPS-BoldMT
Font: CourierNewPS-ItalicMT
Font: CourierNewPS-BoldItalicMT
Font: CourierNewPSMT

Font Family: DB LCD Temp
Font: DBLCDTempBlack

Font Family: Georgia
Font: Georgia-Bold
Font: Georgia
Font: Georgia-BoldItalic
Font: Georgia-Italic

Font Family: Helvetica
Font: Helvetica-Oblique
Font: Helvetica-BoldOblique
Font: Helvetica
Font: Helvetica-Bold

Font Family: Helvetica Neue
Font: HelveticaNeue
Font: HelveticaNeue-Bold

Font Family: Hiragino Kaku Gothic **** W3
Font: HiraKakuProN-W3

Font Family: Hiragino Kaku Gothic **** W6
Font: HiraKakuProN-W6

Font Family: Marker Felt
Font: MarkerFelt-Thin

Font Family: STHeiti J
Font: STHeitiJ-Medium
Font: STHeitiJ-Light

Font Family: STHeiti K
Font: STHeitiK-Medium
Font: STHeitiK-Light

Font Family: STHeiti SC
Font: STHeitiSC-Medium
Font: STHeitiSC-Light

Font Family: STHeiti TC
Font: STHeitiTC-Light
Font: STHeitiTC-Medium

Font Family: Times New Roman
Font: TimesNewRomanPSMT
Font: TimesNewRomanPS-BoldMT
Font: TimesNewRomanPS-BoldItalicMT
Font: TimesNewRomanPS-ItalicMT

Font Family: Trebuchet MS
Font: TrebuchetMS-Italic
Font: TrebuchetMS
Font: Trebuchet-BoldItalic
Font: TrebuchetMS-Bold

Font Family: Verdana
Font: Verdana-Bold
Font: Verdana-BoldItalic
Font: Verdana
Font: Verdana-Italic

Font Family: Zapfino
Font: Zapfino

UIFont fontWithName 后不知道字体的名字,看了下面的全解决!

%title插图%num


3.打印字体族,和字体名字
转自:http://www.2cto.com/kf/201505/397306.html

ios的提供了很多的字体样式。有时候我们在开发应用的时候可能用到不同的字体,通过此Demo我们可以获取到所有的字体样式供我们选择。 首先获取字体字体族科名字,再通过族科的名字获取到字体的名字。

    NSArray *arr  = [UIFont familyNames];

    for (NSString *str in arr) {

        NSArray *at = [UIFont fontNamesForFamilyName:str];

        for (NSString *fffff in at) {

            NSLog(@”字体名字 %@”,fffff);

        }

    }

然后再使用如下代码就可以修改字符串的字体 。


//    NSString * testStr  = @我随手一打就是漂亮的十五个字了;

NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:testStr];

[str addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(0,3)];

[str addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(3,4)];

[str addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:NSMakeRange(7,4)];

[str addAttribute:NSFontAttributeName value:[UIFont fontWithName:_fontArray[indexPath.row] size:30] range:NSMakeRange(0, 15)];

 
?显示中文和英文的效果不是很一致,英文的效果明显一些,如下是部分效果截图。具体在Demo里面有。
\

\

 

\

iOS 修改系统定位(非越狱)

修改系统定位其实是不太可能的(除非越狱)。那么我们今天就通过一个简单方式来修改系统的定位,当然是有一定的限制的。

首先:我们先创建一个项目,名字随意。然后一个文件LocationPosition.gpx如下:

%title插图%num

%title插图%num

然后打开这个LocationPosition.gpx文件如下:

<?xml version=”1.0″?>
<gpx version=”1.1″ creator=”Xcode”>

<!–
Provide one or more waypoints containing a latitude/longitude pair. If you provide one
waypoint, Xcode will simulate that specific location. If you provide multiple waypoints,
Xcode will simulate a route visiting each waypoint.
–>
<wpt lat=”39.89606702936854″ lon=”116.36890332416854″>

<name>Cupertino</name>

<!–
Optionally provide a time element for each waypoint. Xcode will interpolate movement
at a rate of speed based on the time elapsed between each waypoint. If you do not provide
a time element, then Xcode will use a fixed rate of speed.

Waypoints must be sorted by time in ascending order.
–>
<time>2014-09-24T14:55:37Z</time>
</wpt>

</gpx>
直接修改<wpt lat=”39.89606702936854″ lon=”116.36890332416854″>其中: lat是纬度,lon是经度,然后保存即可,当然也可以添加多个。

*后一步: Product->Scheme->Edit Scheme->Run->Options->Core Location->Default Location 选择:LocationPostion 如下图:

%title插图%num

然后运行XCode到真机上,即可以实现系统定位了。

这样有个问题就是,如果我们stop了XCode发现就不管用了,那么怎么解决呢。

这个可以在运行后直接拔掉链接线。那么就可以无忧的实现系统定位了。好了如果还有什么问题可以自己努力了。

iOS系统回退教程

如果你升级了系统之后觉得体验不好或者不习惯怎么办呢?这篇教程就教你回退iOS系统,也就是降级。
1.首先下载iOS固件,访问苹果官方固件下载网站,你会看到4个步骤,分别是:
Choose a product
Choose a platform
Choose a version
Download!
你只需要按照这4个步骤来选择适用你手机的固件,
选择你的产品类型,点击iPhone;

选择手机型号,Global是全网通版本,GSM是移动/联通版本,请确认自己手机的版本,千万不要选错了;

选择固件版本,Signed IPSWs下面的绿色列表是你可以选择的iOS版本,也就是说,这些版本的官方验证通道还没有关闭,是可以正常使用的,选择其中的一个你需要的版本,点击进入下载页面。如果绿色列表中没有你要的版本,说明你要的版本已不支持回退,本文以下内容可以不用再看了;

点击Download按钮下载即可,下载的文件是一个后缀为.ipsw的文件。

2.下载windows PC版本的iTunes(Microsoft下载,点击【获取】按钮即可安装;也可以从Apple官网下载)。
3.安装好iTunes后打开,并将手机通过USB数据线(*好用原装数据线)连接到你的电脑,iTunes检测到后会连接到你的手机,手机上会有弹窗,点击信任即可,连接好后,iTunes左上角会有一个手机的图标出现,点击手机图标(也可能会自动打开与手机相关的页面)打开手机相关页面。
4.数据备份,升级一般数据不会丢失,降级则数据会丢失(这种情况下一定要数据备份),但是为了数据安全性,建议无论是升级还是降级都先备份数据,备份的方式有两种:通过iCloud或者iTunes备份,这里我们选择通过iTunes手动备份(速度快,存储在电脑上),因为只有手动备份才能修改7中说的版本号,备份完毕后再执行下一步操作。
5.升/降级前在设置-顶部头像-iCloud-查找我的iPhone中点击关闭。如果你下载的固件版本低于当前版本选择【恢复iPhone】,如果高于当前版本,则选择【检查更新】,注意点击前先按住【Shift】按键(Mac电脑按住【ALT】按键),然后在弹窗中选择你之前下载好的固件(ipsw文件),然后就是较长一段时间的等待咯。切记中途不要插拔USB数据线。
6.系统升/降级完成后(正常情况下是这样,也有可能中途会报错失败,那样的话你得执行恢复操作,iTunes会有相应的操作提示,也就是还原你之前的系统),下一步就是数据的还原了,升级的话一般数据都还在,降级的话这一步是必须的(降级后相当于拿到了一部新手机,指纹都得重新录入,操作步骤就不说了,其中会提示数据恢复,可以先跳过),降级后的数据恢复请先阅读下面的第7点,现在之前备份的数据就派上用场了,iTunes里面有一个数据恢复,选择你之前备份的数据恢复即可。
7.但是降级后有一个问题就是有可能你之前在高版本系统上备份的数据不能用于低版本的数据恢复,解决办法就是找到你电脑上iTunes的备份目录,我的是在C:\Users\用户名\Apple\MobileSync\Backup下,有一个名字是字母数字混合且很长的文件夹,这就是你备份的数据,打开它,里面有一个文件叫Info.plist,编辑它,修改Product Version下面的版本号,比如你回退的版本号是12.4.1, 注意不要有空格,然后保存即可。
<key>Product Version</key>
<string>12.4.1</string>
1
2
唠嗑:
说一下为啥我会去降级,12.4.1是iOS12的*后一个版本,我的手机是iphone8,一款支持3D touch 的机型,我升级iOS13后发现这个功能变得不伦不类的,iOS13为了照顾那些新的不支持3D touch的机型,搞了一个haptic touch,就是用长按来实现一些类似3D touch的体验,但是经过我的体验过后,发现在已经支持3D touch的机型上存在问题,差不多两个功能同时存在了,反而使3D touch的体验大打折扣,幸运的是我在12*后一个版本关闭验证通道前回退到了12,从此,我的iOS就停留在了12.4.1,直到今天(2020.8)在*新的iOS中依旧没有修复这个问题,我也给苹果发过邮件,希望在已经支持3D touch的机型中不要引入haptic touch, 因为根本不需要,而且haptic touch也代替不了3D touch, 因为3D touch是有不同压感的,不同的压感有不同的反馈,这是硬件支持的,单纯的软件层

iOS开发中点击推送跳转到指定页面

消息推送在现在的App中很常见,但同一个App中推送的消息可能有多种类型,点击推送需要跳转到不同的指定页面。

做法:

我们在接收到推送的时候发送通知,每个页面都接收通知,如果有通知就在当前页面进行页面的跳转跳转到指定页面。

如果在每个页面中都添加接收通知的代码会很麻烦,我们可以将接收通知的代码添加到基类中,这样就简单、方便了许多。可有些项目中的代码中可能没有基类,就像我们公司中的这个项目,那也没问题,我们可以为视图控制器添加一个分类,将接收通知的代码添加到分类中,再在pch文件中导入此分类。

接收推送发送通知的代码:

– (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

{

 

//关闭友盟自带的弹出框

[UMessage setAutoAlert:NO];

 

[UMessage didReceiveRemoteNotification:userInfo];

 

[[NSNotificationCenter defaultCenter] postNotificationName:@”pushNoti” object:nil];

 

}

接收通知进行页面跳转的代码,此代码在视图控制器的分类中:
+ (void)load

{

 

Method m1;

Method m2;

 

// 运行时替换方法

m1 = class_getInstanceMethod(self, @selector(statisticsViewWillAppear:));

m2 = class_getInstanceMethod(self, @selector(viewWillAppear:));

 

method_exchangeImplementations(m1, m2);

 

 

m1 = class_getInstanceMethod(self, @selector(statisticsViewWillDisappear:));

m2 = class_getInstanceMethod(self, @selector(viewWillDisappear:));

 

method_exchangeImplementations(m1, m2);

}

– (void) statisticsViewWillAppear:(BOOL)animated

{

[self statisticsViewWillAppear:animated];

[MobClick beginLogPageView:NSStringFromClass([self class])];

 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(push) name:@”pushNoti” object:nil];

}

-(void) statisticsViewWillDisappear:(BOOL)animated

{

[self statisticsViewWillDisappear:animated];

[MobClick endLogPageView:NSStringFromClass([self class])];

 

[[NSNotificationCenter defaultCenter] removeObserver:self name:@”pushNoti” object:nil];

}

– (void)push{

 

NotificationVC * notiVC = [[NotificationVC alloc] init];

notiVC.hidesBottomBarWhenPushed = YES;

[self.navigationController pushViewController:notiVC animated:YES];

}

该项目中之前的友盟统计就添加到了该分类中.
好了,本篇博客的主要内容就这些,谢谢阅读。

iOS NSNotification的使用

如果在一个类中想要执行另一个类中的方法可以使用通知
1.创建一个通知对象: 使用notificationWithName:object: 或者 notificationWithName:object:userInfo:

NSNotification* notification = [NSNotification notificationWithName:kImageNotificationLoadFailed(connection.imageURL)
object:self
userInfo:[NSDictionary dictionaryWithObjectsAndKeys:error,@”error”,connection.imageURL,@”imageURL”,nil]];

这里需要注意的是,创建自己的通知并不是必须的。而是在创建自己的通知之前,采用NSNotificationCenter类的方法 postNotificationName:object: 和 postNotificationName:object:userInfo:更加便利的发出通知。这种情况,一般使用NSNotificationCenter的类方法defaultCenter就获得默认的通知对象,这样你就可以给该程序的默认通知中心发送通知了。注意:每一个程序都有一个自己的通知中心,即NSNotificationCenter对象。该对象采用单例设计模式,采用defaultCenter方法就可以获得唯一的NSNotificationCenter对象。

注意:NSNotification对象是不可变的,因为一旦创建,对象是不能更改的。

2.注册通知:addObserver:selector:name:object:

可以看到除了添加观察者之外,还有其接收到通知之后的执行方法入口,即selector的实参。因此为了进行防御式编程,*好先检查观察者是否定义了该方法。例如:添加观察者代码有

[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(aWindowBecameMain:)
name:NSWindowDidBecomeMainNotification object:nil];

这里保证了self定义了aWindowBecameMain:方法。而对于一个任意的观察者observer,不能保证其对应的selector有aWindowBecameMain:,可采用[observer respondsToSelector:@selector(aWindowBecameMain:)]] 进行检查。所以完整的添加观察者过程为:

if([observer respondsToSelector:@selector(aWindowBecameMain:)]) {
[[NSNotificationCenter defaultCenter] addObserver:observer selector:@selector(aWindowBecameMain:) name:NSWindowDidBecomeMainNotification object:nil];
}

注意到addObserver:selector:name:object:不仅指定一个观察者,指定通知中心发送给观察者的消息,还有接收通知的名字,以及指定的对象。一般来说不需要指定name和object,但如果仅仅指定了一个object,观察者将收到该对象的所有通知。例如将上面的代码中name改为nil,那么观察者将接收到object对象的所有消息,但是确定不了接收这些消息的顺序。如果指指定一个通知名称,观察者将收到它每次发出的通知。例如,上面的代码中object为nil,那么客户对象(self)将收到任何对象发出NSWindowDidBecomeMainNotification通知。如果既没有指定指定object,也没有指定name,那么该观察者将收到所有对象的所有消息。

3.发送通知:postNotificationName:object:或者performSelectorOnMainThread:withObject:waitUntilDone:

例如程序可以实现将一个文本可以进行一系列的转换,例如对于一个实例、RTF格式转换成ASCII格式。而转换在一个类(如Converter类)的对象中得到处理,在诚寻执行过程中可以加入或者删除这种转换。而且当添加或者删除Converter操作时,你的程序可能需要通知其他的对象,但是这些Converter对象并不需要知道被通知对象是什么,能干什么。你只需要声明两个通知,”ConverterAdded” 和 “ConverterRemoved”,并且在某一事件发生时就发出这两个通知。

当一个用户安装或者删除一个Converter,它将发送下面的消息给通知中心:

[[NSNotificationCenter defaultCenter]
postNotificationName:@”ConverterAdded” object:self];

或者是

[[NSNotificationCenter defaultCenter]
postNotificationName:@”ConverterRemoved” object:self];

通知中心将会区分它们对象对这些通知感兴趣并且通知他们。如果除了关心观察者的通知名称和观察的对象,还关心其他之外的对象,那么就把之外的对象放在通知的可选字典中,或者用方法postNotificationName:object:userInfo:。

而采用performSelectorOnMainThread:withObject:waitUntilDone:则是直接调用NSNotification的方法postNotification,而postNotificationName和object参数可以放到withObject的实参中。例如:

[[NSNotificationCenter defaultCenter] performSelectorOnMainThread:@selector(postNotification:) withObject:notification waitUntilDone:YES];//注意这里的notification为自定义的一个通知对象,可定义为NSNotification* notification = [NSNotification notificationWithName:@”ConverterAdded”object:self];//那么它的作用与上面的一致

4.移除通知:removeObserver:和removeObserver:name:object:

其中,removeObserver:是删除通知中心保存的调度表一个观察者的所有入口,而removeObserver:name:object:是删除匹配了通知中心保存的调度表中观察者的一个入口。

这个比较简单,直接调用该方法就行。例如:

[[NSNotificationCenter defaultCenter] removeObserver:observer name:nil object:self];

注意参数notificationObserver为要删除的观察者,一定不能置为nil。

PS:这里简单说一下通知中心保存的调度表。通知中心的调度表是给一些观察者指定的一些通知集。一个通知集是通知中心发出的通知的子集。每个表的入口包含:

通知观察者(必须要的)、通知名称、通知的发送者。

下图表示通知集中指定的通知的调用表入口的四种类型:
%title插图%num

下图表示四种观察者的调度表

%title插图%num

*后,提醒一下观察者收到通知的顺序是没有定义的。同时通知发出和观察的对象有可能是一样的。通知中心同步转发通知给观察者,就是说 postNotification: 方法直到接收并处理完通知才返回值。要想异步的发送通知,可以使用NSNotificationQueue。在多线程编程中,通知一般是在一个发出通知的那个线程中转发,但也可能是不在同一个线程中转发通知。

通知 是在跳转控制器之间常用的传值代理方式,除了代理模式,通知更方便、便捷,一个简单的Demo实现通知的跳转传值.

iOS通知传值的使用
输入所要发送的信息 ,同时将label的值通过button方法调用传递,

– (IBAction)buttonClick:(id)sender {

   //添加 字典,将label的值通过key值设置传递

   NSDictionary *dict =[[NSDictionary alloc]initWithObjectsAndKeys:self.textFieldOne.text,@”textOne”,self.textFieldTwo.text,@”textTwo”,nil];

   //创建通知

   NSNotification *notification =[NSNotification notificationWithName:@”tongzhi” object:niluserInfo:dict];

   //通过通知中心发送通知

   [[NSNotificationCenter defaultCenter] postNotification:notification];

   [self.navigationController popViewControllerAnimated:YES];

}

在发送通知后,在所要接收的控制器中注册通知监听者,将通知发送的信息接收

– (void)viewDidLoad {

   [super viewDidLoad];

   //注册通知

   [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tongzhi:)name:@”tongzhi” object:nil];

}

– (void)tongzhi:(NSNotification *)text{

   NSLog(@”%@”,text.userInfo[@”textOne”]);

       NSLog(@”-----接收到通知——“);

}

移除通知:removeObserver:和removeObserver:name:object:

其中,removeObserver:是删除通知中心保存的调度表一个观察者的所有入口,而removeObserver:name:object:是删除匹配了通知中心保存的调度表中观察者的一个入口。

这个比较简单,直接调用该方法就行。例如:

[[NSNotificationCenter defaultCenter] removeObserver:observer name:nil object:self];

注意参数notificationObserver为要删除的观察者,一定不能置为nil。

IOS 启动画面和图标设置(适配IOS7 and Xcode5)

关于IOS程序设置启动画面以及图标的设备目前主要为:IPhone设备 和IPad设备

IPhone启动画面以及图标的设置

目前IPhone的分辨率为:320X480、640X960、640X1136。

Default.png                    320X480 iPhone 320X480分辨率屏幕默认启动图片。

[email protected]             640X960 iPhone 640X960分辨率屏幕默认启动图片。

[email protected]    640X1136  iPhone 640X1136分辨率屏幕默认启动图片。

————————————————————————————–

Icon.png                      57X57       10px   用户AppStore以及iPhone/iPod 中显示 必需

[email protected]              114X114   20px  高清模式

Icon_120.png             120X120   20px  用于iPhone5的高清显示

Icon-Small.png           29X29       20px  用于设置以及Spotlight搜索

[email protected]   58X58      8px     用于Icon-Small.png的高清模式

Icon_80.png  80X80      8px   用于iPhone5在Spotlight搜索

—————————————————————————————

IPad启动画面以及图标设置

Default-Portrait.png                            768X1024        iPad专用竖向启动画面

Default-Landscape.png                      768X1024        iPad专用横向启动画面

Default-PortraitUpsideDown.png        768X1024        iPad专用竖向启动画面(Home按钮在屏幕上面)

Default-LandscapeLeft.png                768X1024        iPad专用竖向启动画面(Home按钮在屏幕左面)

Default-LandscapeRight.png              768X1024        iPad专用竖向启动画面(Home按钮在屏幕右面)

——————————————————————————————–

Icon-72.png         72X72       20px       用于在iPad桌面中显示必需

Icon-50.png         50X50       20px      用于iPad中的Spotlight搜索

Icon-29.png         29X29       10px      设置页面

 

iOS开发phonegap之消息推送

一、安装插件:

1、phonegaplocal plugin add https://github.com/phonegap-build/PushPlugin.git

2、phonegap plugin add cordova-plugin-device

3、phonegap plugin add cordova-plugin-media

二、在js文件中调用

var pushNotification;

var app = {
// Application Constructor

initialize: function() {
this.bindEvents();

},

// Bind Event Listeners

//

// Bind any events that are required on startup. Common events are:

// ‘load’, ‘deviceready’, ‘offline’, and ‘online’.

bindEvents: function() {
document.addEventListener(‘deviceready’, this.onDeviceReady, false);

 

},

// deviceready Event Handler

//

// The scope of ‘this’ is the event. In order to call the ‘receivedEvent’

// function, we must explicitly call ‘app.receivedEvent(…);’

 

onDeviceReady: function() {
app.receivedEvent(‘deviceready’);

app.registerN();

 

},

// Update DOM on a Received Event

receivedEvent: function(id) {

var parentElement = document.getElementById(id);

var listeningElement = parentElement.querySelector(‘.listening’);

var receivedElement = parentElement.querySelector(‘.received’);

listeningElement.setAttribute(‘style’, ‘display:none;’);

receivedElement.setAttribute(‘style’, ‘display:block;’);

console.log(‘Received Event: ‘ + id);

},

registerN: function() {

pushNotification = window.plugins.pushNotification;

 

pushNotification.register(

this.tokenHandler,

this.errorHandler,

{
“badge”:”true”,

“sound”:”true”,

“alert”:”true”,

“ecb”:”onNotificationAPN”

});

},

onNotificationAPN: function(event) {
if ( event.alert )

{
navigator.notification.alert(event.alert);

}

 

if ( event.sound )

{
var snd = new Media(event.sound);

snd.play();

}

 

if ( event.badge )

{
pushNotification.setApplicationIconBadgeNumber(successHandler, errorHandler, event.badge);

}

},

tokenHandler: function(result) {
alert (‘success’);

alert(‘device token = ‘ + result);

},

errorHandler: function(error) {
alert(‘register erro’);

alert(‘error = ‘ + error);

}

};

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速