前言:
一到公司报道那时,便着手独立的去完成了一个项目,其中的辛酸泪也是不足为外人道也。这次算是一个新型的app,仍然是独立开发,但心境和想法却是完全的不同。下面说一次以前做开发时常常忽略的知识,也算是一种复习了吧。下面言归正传:
1.自带键盘的next用法
这算是比较常用的了吧,只要我们想到登录和注册界面,就应该自然而然的想到 - 键盘的next用法(当然不排除相当多的软件并没有实现这个功能)。
想法也就是:用户在输入用户名后,点击next跳转到下一个输入框。其实也不用想的如此复杂,在登录界面,我们完全可以用一个 if 语句做判断,去实现键盘的响应和注销响应。
代码如下:
1 | - (BOOL)textFieldShouldReturn:(UITextField * )textField { |
这样就简单的在变成响应和注销响应之间实现了输入框的切换。
但还是存在一个问题,如果我实现注册界面的跳转输入框,并且在输入框很多的情况下,显然如果我仍是这样判断,会显得啰嗦和冗余。
我曾想过使用计数的方式,记录每一次的点击next后的tag,但实践中失败了,因为当我不通过next而是直接用手去触摸选择输入框时,则无法计数。
这里先留个空白,等把手里的项目完成时再研究这个问题
2. UITextField的纠错和首字母大小写问题
这个问题只是简单的属性问题,在开发时如果忘记,建议多点进去看看,(如:command + UITextField)
1 | //输入框中是否有个叉号,在什么时候显示,用于一次性删除输入框中的内容 |
3. iOS中图片的几种拉伸方法的使用
以下是Apple SDK给出的3种方法:
1 | UIImage *image = [UIImage imageNamed:@"picture"]; |
下面是使用的解释:
1 | /** |
图片拉伸的以上内容参考文章 《iOS图片拉伸技巧》讲的很好,建议大家多看看。
4. iOS中唤起自带浏览器(safari)的方法
也是一个简单的一句代码 ,这种也就是知道了就知道了,不知道就是抓耳挠腮吧
1 | NSURL *url = [NSURL URLWithString:urlStr]; |
5. iOS中唤起电话界面
app内部唤起电话界面的实现,是找了很多资料才有的一个结论(安全,并且拨打完之后可以返回app)
实现的方法是使用UIWebView 加载电话,目前这种方法是合法的,App Store也允许通过的。
1 | NSURL *phoneURL = [NSURL URLWithString:[NSString stringWithFormat:@"tel:%@",newPhoneString]]; |
但如果使用下面的这种方法,则可能不允许通过审核
1 | [[UIApplication sharedApplication] openURL:phoneURL]; |
6. iOS 调用地图的方法
app内部调用第三方app,这里有一个详细的文章《IOS实现应用内打开第三方地图app进行导航》
app内部调用地图,需要先检测用户手机上是否已经安装地图app。
我们常用的地图app有:高德、百度;国外有:谷歌(Google Map )。当然还有苹果自带的地图,随着iOS10的发布,苹果地图这块也有很大的完善和进步。
我使用Xcode模拟器实现时,会提示:
1 | 1、canOpenURL: failed for URL: "iosamap://" error: "(null)" 。 |
原因是:模拟器上没有高德地图。
1 | 2、canOpenURL: failed for URL:"comgooglemaps://" error: "This app is not allowed to query for scheme comgooglemaps"。 |
原因是:LSApplicationQueriesSchemes
我自己马虎设成了字典类型。
首先iOS9以后,我们在app内部要跳转到其他软件时,需要在 Info.plist
中添加白名单。
方法为:在Info.plist
中添加 key : LSApplicationQueriesSchemes
类型为:Array
。
将高德、百度、谷歌的值填进去分别是:iosamap
、baidumap
、 comgooglemaps
图片:
至于下面代码中的URLScheme
和appName
是在Info.plist
的URL types
中添加 URL Scheme
(URL Schemes是一个数组,允许应用定义多个URL schemes)和URL identifier
(建议采用反转域名的方法保证该名字的唯一性,比如 com.yourApp.www
)
图片如下:
下面是部分的代码:
6.1判断百度地图是否安装
1 | BOOL isBaiduMap = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"baidumap://"]] |
6.2判断高德地图是否安装
1 | BOOL isGaodeMap = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"iosamap://"]] |
6.3 判断谷歌地图是否安装
1 | BOOL isGoogleMap = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"comgooglemaps://"]] |