开发Tips收集-2016年06月

这些小Tips为本人近期读书笔记,收集来自网络开发者发布的技术文档,并非原创,共享的目的是为了扩散分享技术,共同进步。如有侵权不得转载等情况,请联系我告知,谢谢!

  • iOS获取通知需要注意以:iOS 设备收到一条推送(APNs),用户点击推送通知打开应用时,应用程序根据状态不同进行处理需在 AppDelegate 中的以下两个方法中添加代码以获取apn内容
    1. 如果 App 状态为未运行,此函数将被调用,如果launchOptions包含UIApplicationLaunchOptionsRemoteNotificationKey表示用户点击apn 通知导致app被启动运行;如果不含有对应键值则表示 App 不是因点击apn而被启动,可能为直接点击icon被启动或其他。
      (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions;
      // apn 内容获取:
      NSDictionary *remoteNotification = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey]
  • 基于iOS 6 及以下的系统版本,如果 App状态为正在前台或者点击通知栏的通知消息,那么此函数将被调用,并且可通过AppDelegate的applicationState是否为UIApplicationStateActive判断程序是否在前台运行。此种情况在此函数中处理:
    (void)application:(UIApplication )application didReceiveRemoteNotification:(NSDictionary )userInfo; // apn内容为userInfo
  • 基于iOS 7 及以上的系统版本,如果是使用 iOS 7 的 Remote Notification 特性那么处理函数需要使用
    (void)application:(UIApplication )application didReceiveRemoteNotification:(NSDictionary )userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler; // apn内容为userInfo
  • 触摸事件withEvent:的方法处理流程:首先会在当前视图view上调用pointInside:withEvent:方法来判断触摸事件是否存在当前view中,如果返回NO,则说明触摸事件不在该view范围中,hitText:withEvent:方法返回nil;如果返回YES,则说明触摸在该view中,则向该view的subViews发送htiText:withEvent:消息,所有subviews的数组遍历顺序是从后往前,直至遍历到pointInside:withEvent:返回值为非空或者遍历完所有subview结束。如果遍历有非空对象,则hitTextField:withEvent:返回该对象结束;如果遍历完没有非空对象,则返回自己(self)。
  • 响应者原理:首先会在触摸view上调用inital view方法,看能否处理此事件,如果不能则会将事件传递给其上级视图(inital view的superView);如果上级视图仍然无法处理则会继续往上传递;一直传递到视图控制器view controller,首先判断视图控制器的根视图view是否能处理此事件;如果不能则接着判断该视图控制器能否处理此事件,如果还是不能则继续向上传递;(对于第二个图视图控制器本身还在另一个视图控制器中,则继续交给父视图控制器的根视图,如果根视图不能处理则交给父视图控制器处理);一直到window,如果window还是不能处理此事件则继续交给application(UIApplication单例对象)处理,如果最后application还是不能处理此事件则将其丢弃。
  • UITabBarController的subview 共有两个,一个叫 UITabBar,就是底下的那个 Bar;另一个叫UITranstionview,就是 Bar 上面的视图。把UITabBar的 y 向下移49个单位,把UITranstionview 的 hight 加长 49 个单位,也能实现隐藏UITabBar的效果。
  • UITextView开始编辑时,文字没有左上角对齐解决办法:其一,没有给textview对齐方式;其二,没有将BOOL类型的“automaticallyAdjustsScrollViewInsets”属性置为yes