2017年3月

点击 UITableView 的 footerView 上的 button 不响应问题

今天在使用UITableView时,在tableView的footerView上添加了一个button,控件显示正常,但当我点击该button时,button不能响应点击事件。通过尝试将该button放到其他view上,可以看到该button可以正常响应点击事件。可以判断是该button所在的view影响了事件的响应。

使用Reveal查看整个页面,发现footerView的高度为0.

于是恍然大悟,控件没有高度,是无法响应事件的。添加如下代码:

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    return 100;
}

给footerView一个高度,button事件响应正常。

iOS 项目通过CocoaPods 导入ReactiveCocoa

  • 如果你只是纯 swift 项目,你继续使用 ReactiveCocoa 。但是 RAC 依赖于 ReactiveSwift ,等于你引入了两个库。这种情况下的podfile的文件如下:
use_frameworks!
target 'Target名称' do
pod 'ReactiveCocoa', '5.0.0-alpha.3'
end
  1. 如果你的项目是纯 OC 项目,你需要使用的是 ReactiveObjC 。这个库里面包含原来 RAC 2 的全部代码。这种情况下的podfile的文件如下:
use_frameworks!
target 'Target名称' do
pod 'ReactiveObjC', '~> 2.1.0'
end
  1. 如果你的项目是 swift 和 OC 混编,你需要同时引用ReactiveCocoaReactiveObjCBridge 。但是 ReactiveObjCBridge 依赖于 ReactiveObjC ,所以你就等于引入了 4 个库。 其中,ReactiveObjCBridge暂不支持CocoaPods导入,需要手动导入!!
    这种情况下的podfile的文件如下(注意,ReactiveObjCBridge手动导入就好啦)

This app has crashed because it attempted to access privacy-sensitive data without a usage description.

This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSCameraUsageDescription key with a string value explaining to the user how the app uses this data.

今天使用相机硬件的时候,导致了一个系统崩溃的问题,从报错的信息来看,是说App在尝试访问一个私有敏感信息而没有一个描述信息。并且在报错信息中,说明了要怎么去添加一个描述信息。

根据错误信息指引,我们需要在Info.plist文件中添加一个可用的描述信息:Privacy - Camera Usage Description ,value值可用随便填(如:需要您的允许才能使用相机),主要是给用户一个提示。

这样我们再次打开相机的时候,就会给用户一个友好的提示。

这是iOS10对APP获取用户隐藏的一个加强。

附:获取其他用户敏感信息的提示描述信息

Privacy - Microphone Usage Description //麦克风权限
Privacy - Contacts Usage Description   //通讯录权限
Privacy - Camera Usage Description     //摄像头权限
Privacy - NSSiriUsageDescription       //Siri的权限
Privacy - Bluetooth Peripheral Usage Description //蓝牙
Privacy - Reminders Usage Description  //提醒事项
Privacy - Motion Usage Description     //运动与健康
Privacy - Media Libaray Usage Description //媒体资源库
Privacy - Calendars Usage Description  //日历

UIView 正在进行动画时,默认禁止用户交互

今天遇到一个问题,使用

[UIView animateWithDuration:3 animations:^{
    self.contentView.backgroundColor = [UIColor clearColor];
}];

方法进行动态改变控件背景色,但发现在动画进行时,控件死活不响应用户手势,经过查看API,发现有个参数:

UIViewAnimationOptionAllowUserInteraction      = 1 <<  1, // turn on user interaction while animating

猜想该动画默认是不允许用户进行交互的

通过在该动画中添加该参数:UIViewAnimationOptionAllowUserInteraction

[UIView animateWithDuration:3 delay:0 options:UIViewAnimationOptionAllowUserInteraction animations:^{
    self.contentView.backgroundColor = [UIColor clearColor];
} completion:nil];

使问题得以解决。