iOS
[toc]
开发随笔
Swift 变量对外只读,对内可读写
项目中经常需要创建这样一种变量:对内可读写,但对外是只读的。在 OC 中,只需在 .h
文件中将属性定义为 readonly
,而在 .m
文件中将该属性重新定义为 readwrite
即可。
可是在 Swift 中却没有这样让我们重新定义权限的机会,那么我们该如何去创建这样的变量呢?
Swift中的实现方式:
1 | class Person { |
别看有 private
就以为其他类不能访问 name
属性了,其实只是 setter
方法是私有的,所以在其他类中是可以访问 name
属性的,只是不能修改而已,而在 Person
类中是读写都可以。
怎样优雅的禁用掉Swift中的方法
尝试理解Swift中的@escaping
https://www.jianshu.com/p/dd0537a40fc6/
ios – Swift – UIButton重写setSelected
http://www.voidcn.com/article/p-cdthfhqm-bte.html
swift函数参数指针传递inout和@escaping冲突的解决方法
https://blog.csdn.net/boildoctor/article/details/111559223
swift3.0 让方法参数可修改方法
https://blog.csdn.net/a1018875550/article/details/75174640
Swift学习笔记 In-out形参
swift map reduce 获取下标(index)的方法
http://www.voidcn.com/article/p-cstjyafn-bmd.html
Swift 数组删除元素(删除多个)
https://www.meiwen.com.cn/subject/jwpmbctx.html
Swift中编写单例的正确方式
http://www.cocoachina.com/articles/14584
Swift中的nil
Swift中的nil和OC中的nil不一样。OC中的nil表示不存在的对象,你无法给NSInteger类型的变量赋值nil,但是Swift中的nil表示不存在,可以给任何Optional的变量或者常量赋nil,即使是普通类型:
1 | var a: Int? = nil |
但是,需要注意的是,无法给非Optional类型的变量或者常量赋nil:
swift 数组的添加和删除
insert(_:at:) 在指定位置插入一个元素
insert(contentsOF:at)在指定位置插入多个元素
swift 条件编译 自定义环境变量
https://www.jianshu.com/p/9a93e614a98e
Swift initializer
https://www.jianshu.com/p/bdb07143d368
Swift - 实现动画
https://blog.csdn.net/weixin_43704791/article/details/86529516
iOS
[toc]
UICollectionView SelectItem方法无效的原因
https://blog.csdn.net/weixin_34127717/article/details/88010800
- [collectionView reloadData];
- [collectionView layoutIfNeeded];
- [collectionView selectItemAtIndexPath:indexPath animated:YES scrollPosition:UICollectionViewScrollPositionNone];
UICollectionView删除数据更新
前段时间在做商品收藏的时候,用UICollectionView展示收藏商品,删除收藏用到collection的删除方法。
1 | [ ]; |
发现一个问题,collection执行deleteItems后只会调用numberOfItemsInSection刷新一下item的数量,并不会调用cellForItemAtIndexPath来刷新数据,(因为只是删除,item的内容不会变,只会动一下位置),这就导致了一个问题,当我删除到最后一个cell的时候,发现数组越界。原因是dataAry只剩一个数据,但是indexPath.row=1。
解决方案:
1 | [collectionView performBatchUpdates:^{ |
每次删除执行完后刷新数据。大家有其他解决办法欢迎指正。
所以为了不执行reloadData,
UICollectionView cellForItemAtIndexPath 方法不走
在storyboard 中
UICollectionView cellForItemAtIndexPath not called
被坑了好久,各种问题点查找,终于解决了
解决办法:automaticallyAdjustsScrollViewInsets
1 | self.automaticallyAdjustsScrollViewInsets = NO;//解决cellForItemAtIndexPath not called问题 |
iOS
[toc]
indexPath 返回nil
请检查是不是在如viewWillAppear的方法中执行了reload
self.contentView.sendSubviewToBack(shadowView) // 请确保 shadowView 和 tableView 加到的是同一个父视图
否则,后添加的视图会盖住前面的视图。如tableView添加到cell上,shadowView添加到cell.contentView上
一、cell的自适应高度
1、基础设置
1 | tableView.estimatedRowHeight = 60; |
2、某行不自适应
1 | - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { |
3、如果自适应的cell的高度不够
1 | make.height.greaterThanOrEqualTo(@60); // 为了自适应的时候,最小的cell高度不会小于指定值 |
二、tableView的headerInSectionView 不悬浮
https://blog.csdn.net/wait_foryou/article/details/78256905
1 | // UITableView的Style为Plain时, 当tableView上移顶端的tableHeaderView会跟着滑出窗口, 而headerInsectionView则会悬浮固定在窗口顶端不随着滑动继续上移. |
自己的另一种方法
1 | // 还是Group |
三、tableView等reloadData真正刷新结束后执行下一步操作
reloadData不会等tableView更新结束后才返回,而是立即返回,然后计算表高度,执行滚动之类的代码。
很明显这里的原因是因为数据比较大,一个run loop周期没执行完,tableView滚动时,表的高度不对。
问题场景:
情况1:reloadData后,scrollToRowAtIndexPath未滚动到指定区域
情况2:reloadData后,setContentOffset未滚动到指定区域
解决方法(两种):
1、强制刷新
1 | [self.myTableView reloadData]; |
layoutIfNeeded会强制重绘并等待完成。
2、线程等待
1 | [self.myTableView reloadData]; |
[tableView reloadData]在主队列执行,而dispatch_get_main_queue()会等待主队列空闲后才执行。
iOS
[toc]
网站
散文网:瑞文网
iOS输入框的字数统计/最大长度限制详解
https://www.jb51.net/article/142743.htm
iOS 计算表情的个数
https://blog.csdn.net/u010913882/article/details/37568761
iOS带Emoji字符串的安全截取
【iOS】iOS OC截取字符串时emoji表情处理 取emoji表情的range
https://www.jianshu.com/p/416ff5e6fc67
iOS字符截取(表情汉字)
OC+Swift混编问题
[TOC]
一、混编配置
1、混编处理
①、OC 调用 Swift
1、建立XXX-Swift.h
附:如果你是OC工程中第一次创建swift文件,则系统会在自动帮你搭建XXX-Bridging-Header.h的同时,为你生成该文件。即那种情况下,此步可略过
2、Defines Module 设置为YES (对Project操作,非Targets)
3、oc 文件中 #import “XXX-Swift.h”
②、Swift 调用 OC
XXX-Bridging-Header.h
二、Property has a previous declaration
将项目中#import “MJExtension.h”的部分,全部替换成
#import <MJExtension/MJExtension.h>
然后问题就解决了。
邓白氏编码申请
[TOC]
一、邓白氏编码的申请
1、Enroll前的了解
2、点击《Learn More》后会进入如下界面:https://developer.apple.com/support/D-U-N-S/,界面截图如下:
3、选择《D-U-N-S Number look up tool》后,会进入 https://developer.apple.com/enroll/cn/duns-lookup/#!/search 查找页面,页面部分截图如下:
4、选择《请提交您的信息》后会进入 https://developer.apple.com/enroll/cn/duns-lookup/#!/request 页面
二、申请公司身份开发app所需材料
查找您的 D-U-N-S 编号:https://developer.apple.com/enroll/cn/duns-lookup/
第1节:ReactNative的Demo实践
[TOC]
ReactNative的Demo实践
一、工程创建
创建APP(iOS & Android)项目
1 | react-native init TSDemoDemo |
1、iOS工程
1 | cd iOS项目 |
2、Android工程
1 | 终端运行cd myProject切换到项目根目录中, |
二、添加路由
参考文档
1 | ① |
三、
参考文章:
React Native iOS混合开发 写得挺好,建议阅读下
Native到JS的通信(Native发送数据给JS)
eg:发送一个文本给JS
在JS中获取Native通过
RCTEventEmitter
传过来的数据
iOS - React-Native : 原生跳转RN、RN跳转原生、RN界面嵌入原生 一定要读
- 原生界面嵌入到RN界面中,eg:原生界面作为RN tabBar中的一个界面
步骤:
- 将需要嵌入的界面/控制器 制作成RN的组件
四、发布
1 | npm config get registry |