iOS8+ UIAlertView pop/push页面后,键盘闪一下的问题

问题描述

如果当前页面有UITextField时使用UIAlertView,在pop或者push时,在新的页面键盘会弹出一下,再收回。这个问题困扰了我很久,一开始没意识到这是iOS8系统以后导致的问题,因为当时接手这个项目的时候刚刚发布iOS8没多久,我的测试机还是iOS7,没有这个问题,只是在同事iOS8的手机上能见到,当时以为只是偶发现象觉得不严重也就没去处理。现在应用做扩展升级,发现这个问题几乎每个机子上都会发生,大部分的机子现在都是iOS8+和iOS9+。下午没事儿就想把这个由来已久的问题解决一下。网上搜到了导致这个现象的原因:在ios8以后,苹果提倡使用UIAlertController而非UIAlertView,键盘收回动作需要0.25s的时间,而UIAlertView弹出是阻碍了键盘的收回动作。
由于目前应用还是要支持iOS7+所以不能全部换成UIAlertController,只好用一下折中的办法。

iOS使用自定义字体

网上有很多关于怎么在iOS系统中添加自定义字体的文章,比如iOS使用自定义字体IOS中怎么使用微软雅黑字体 但是要么就是太笼统要么就是有些许的错误,导致我为了简单的添加一个中文字体竟然浪费了近一个小时。所以,我参照这两篇文章,做一个总结。

这两篇文章虽然都条理清晰地描述了怎样在iOS中添加自定义字体,但仍不能让人一次就能正确操作:

iOS开发常用插件和工具总结

问题描述

如果当前页面有UITextField时使用UIAlertView,在pop或者push时,在新的页面键盘会弹出一下,再收回。这个问题困扰了我很久,一开始没意识到这是iOS8系统以后导致的问题,因为当时接手这个项目的时候刚刚发布iOS8没多久,我的测试机还是iOS7,没有这个问题,只是在同事iOS8的手机上能见到,当时以为只是偶发现象觉得不严重也就没去处理。现在应用做扩展升级,发现这个问题几乎每个机子上都会发生,大部分的机子现在都是iOS8+和iOS9+。下午没事儿就想把这个由来已久的问题解决一下。网上搜到了导致这个现象的原因:在ios8以后,苹果提倡使用UIAlertController而非UIAlertView,键盘收回动作需要0.25s的时间,而UIAlertView弹出是阻碍了键盘的收回动作。
由于目前应用还是要支持iOS7+所以不能全部换成UIAlertController,只好用一下折中的办法。

群讨论记录2

  • 记录了群里2016-02-22至2016-02-28讨论的一些问题,如有错误还望告知。
1. 关于Objective-C链式编程的“点语法”
1
2
3
4
5
6
7
8
9
person.run();
- (Person * (^)())run {
Person * (^block)() = ^(){
NSLog(@"run");
return self;
};
return block;
}
  • 问题描述:对于链式编程有个疑问,run不是set get方法,为什么可以用点操作符?
  • 问题讨论:大概是因为.run返回block然后返回block(),文章iOS利用block实现链式编程方法中指出:block具有一个函数的外观,又被当作一个变量。那么block就具备两个功能,第一:可以作为类的属性被’点’出来。第二:可以当作函数直接调用。下面逐个解释,第一个类的属性可以点出来,比如person.name;这很好理解,你一定见过,str.length;对吧。第二个呢,block作为一个变量,但是又可以把它当作指向函数的指针一样调用。
  • 追加问题:还有个问题,就是任何方法都可以用点操作调用, 例如 person.eat ,运行正常,但是调用时会有个警告.property access result unused - getters should not be used for side effect.这是什么意思?我以为点操作符调用都是只能用在set get方法上的
  • 追加问题结果:出现警告的原因就是点操作符会展开成get方法,而没变量来接收的话就会出现警告。无参方法才能点操作符调用,但是一般不这么用,有参数的方法就不能用点操作符了,因为编译器认为不是get方法,所以不带参数的方法,系统就认为是get方法。(这个是提问者自己后来经过查询测试得出的结论)
  • 304,602

群分享--待整理归纳

主要是记录一些群里分享的一些好用的轮子、第三方库或者文章书籍,方便以后用的时候查找,目前记录可能比较零散,等记录多了会进行分类归纳。

1. 实现折线、柱状图、饼状图效果

1.小非的LPLineChartView
目前这个主要是实现了单线的折线图,但是实现的效果和性能非常棒,连傲娇的群主都挑不出什么错误呢。
小非的LPLineChartView图例

群讨论记录1

  • 记录了群里2016-02-15至2016-02-21讨论的一些问题,如有错误还望告知。
1. 电脑上的证书提示:“此证书的签发者无效”

此证书的签发者无效

  • 问题描述:登录开发者账号,发现账号证书依然可用,只是电脑上的显示“此证书的签发者无效”,而且发布也会出错。
  • 问题原因:Apple World Wide Developer Relations Certificate Authority的过期时间是2016年2月14日,因此签发者签发的证书都过期了。
  • 问题解决:
    方法1:在钥匙串中删除过期证书,重新下载证书安装。已经有人写了详细的教程,这里就不在赘述了,详见解决办法
    方法2:直接在过期的证书上右键->显示简介->信任->使用此证书时,设置为“始终信任”。但这种方法可能有未知风险,虽然能快速解决眼前的问题,所以请慎用。
2. 百度云推送旧版本SDK的应用突然收不到推送
  • 问题描述:使用百度云推送旧版本SDK的应用突然收不到推送了 安卓端能收到 升级新版本后能收到推送 但服务端和安卓端也需要跟着升级 服务端不是很乐意啊 请问有人遇到这种情况吗 不升级版本有什么好的解决办法吗?都上线半年了 客户说收到推送就崩溃。
  • 问题原因:使用jsonkit的原因,在之前兼容64位操作系统时jsonkit 出问题,这次ios9更新又中招了,更新xcode7后原来的jsonkit崩溃,崩溃位置为:
1
2
[JKSerializer serializeObject:options:encodeOption:block:delegate:selector:error:]
void *keyObjectISA = *((void **)keys[idx]);