一.介绍 在iOS开发中,tableView非常常用,能将其展示出来,它的数据源必不可少.当然数据源有动态下发的,有固定写死的,这里我只探讨固定写死的情况.对于死数据,我们在项目中经常遇到的场景就是我的模块,以及设置模块等.那么,这些死数据我们如何组装的呢?  在以前开发中,我直接用一个可变数组装着每一个cell对应的字典(字典中包含每一个cell需要字段的键值对),虽然也可以实现效果,但是扩展不方便,本人不推荐. 在开发中,我的搭档推荐我项目中的封装的cell模型,我一看,确实不错,在这里给大…
之前山寨了一个新浪微博(iOS开发之山寨版新浪微博小结),这几天就山寨个微信吧.之前已经把微信的视图结构简单的拖了一下(IOS开发之微信山寨版),今天就开始给微信加上具体的实现功能,那么就先从微信的聊天界面开始吧.提到封装是少不了写代码的,在封装组件的时候,为了组件的可移植性,我们就不能用storyboard来拖拽了.为了屏幕的适配,适应不同屏幕的手机,所以在封装组件的时候是少不了为我们的组件来添加约束.今天博客中的所有代码都是脱离storyboard的,这些代码在别的工程中也是可以使用的.好,…
wzplayer for ios针对mms优化版本发布. 1.支持mms,http,rtmp,rtsp等协议 2.支持全格式 下载地址:http://www.coolradio.cn/WzPlayer.ipa 更强大的,请使用tlplayerhttp://blog.csdn.net/tigerleap/article/details/19007057 联系方式:weinyzhou86@gmail.com QQ:514540005 版权所有,禁止转载. 发布自:http://blog.csdn.n…
在PO模式当中,我们做到了页面对象与测试用例的分离,但在页面对象编写时,我们仍然还有优化的空间.页面对象有一些共同的基本操作,可以封装起来,并可以在基本操作当中加上日志和异常截图的处理.比如说我们在查找元素时,都需要等待,在PO模式当中,需要都写上等待和查找元素,那么就可以将其封装起来,包括其它的一些比如:文本获取.元素属性获取.鼠标操作.窗口切换.iframe切换.alert弹框关闭.文件上传.下拉框选择...... 当脚本运行的过程中,出现了用例失败,我们希望可以通过日志和截图来分析失败的原…
iOS开发UI篇—核心动画(UIView封装动画) 一.UIView动画(首尾) 1.简单说明 UIKit直接将动画集成到UIView类中,当内部的一些属性发生改变时,UIView将为这些改变提供动画支持 执行动画所需要的工作由UIView类自动完成,但仍要在希望执行动画时通知视图,为此需要将改变属性的代码放在[UIViewbeginAnimations:nil context:nil]和[UIView commitAnimations]之间 常见方法解析: + (void)setAnimati…
APP自动化跟WEB自动化所使用的框架基本一样,都是采用的PO模式结合pytest框架编写自动化测试脚本,为了提高代码的复用性.稳定性和易维护性,我们针对PO模式进行了二次封装,将日志,等待以及异常截图加入到其中,app相比较web而言,没有鼠标 .下拉框选择.frame切换.窗口切换和上传等操作,但它有属于自己的滑屏.toast获取.上下文切换.应用切换等操作. import time from datetime import datetime import allure from selen…
下面的东西是编写自定义的表情键盘,话不多说,开门见山吧!下面主要用到的知识有MVC, iOS开发中的自动布局,自定义组件的封装与使用,Block回调,CoreData的使用.有的小伙伴可能会问写一个自定义表情键盘肿么这么麻烦?下面将会介绍我们如何用上面提到的东西来定义我们的表情键盘.下面的内容会比较多,这篇博文还是比较有料的. 还是那句话写技术博客是少不了代码的,下面会结合代码来回顾一下iOS的知识,本篇博文中用到的知识点在前面的博客中都能找到相应的内容,本篇算是一个小小的功能整合.先来张图看一…
一直想总结一下关于iOS的离线数据缓存的方面的问题,然后近期也简单的对AFN进行了再次封装.全部想把这两个结合起来写一下.数据展示型的页面做离线缓存能够有更好的用户体验,用户在离线环境下仍然能够获取一些数据.这里的数据缓存首选肯定是SQLite,轻量级.对数据的存储读取相对于其它几种方式有优势,这里对AFN的封装没有涉及太多业务逻辑层面的需求.主要还是对一些方法再次封装方便使用.解除项目对第三方的耦合性.能够简单的高速的更换底层使用的网络请求代码.这篇主要写离线缓存思路.对AFN的封装仅仅做简单…
在工作中整理的一些分类与工具类,分享给大家.这些工具类可以减少项目中的代码量,让代码变得更简洁,可以大大的提升项目的效率,直接拖到项目中使用即可.下载地址:https://github.com/leeSmile/tools/tree/master/textTools 欢迎start 分类 NSString+LXExtension 1.根据文件名计算文件大小 2.快速生成缓存/文档/临时目录路径 3.根据文字返回文本占用的高度/宽度 4.MD5加密 /** *  md5加密 */ + (NSStr…
闲来无事写点东西,希望大家多多指正! 大家先去git下载FMDB,然后将其中source文件夹中的fmdb文件夹拖入自己的项目中.最后就可以引用下面的代码对fmdb进行一次简单的封装. 这样可以更直观的使用数据库进行增删改操作. /** *  可以存储数据类型  text  integer  blob  boolean  date *  keyTypes      存储的字段  以及对应数据类型 *  keyValues     存储的字段  以及对应的值 */ #import <Foundat…
一.介绍 以前做过讯飞语音识别,比较简单,识别率很不错,但是它的识别时间是有限制的,最多60秒.可是有的时候我们需要更长的识别时间,例如朗诵古诗等功能.当然讯飞语音也是可以通过曲线救国来实现,就是每达到60秒时识别停止就立即重新开启,每次结束拼接录音.这么做,显然是麻烦的,百度语音解决了这个问题,它最近上线了长语音识别技术,可以不受时间限制,还是非常棒的.这次,我就专门抽成一个工具类使用,包括语音识别,录音拼接,录音播放.进度刷新,具体如何集成SDK看官方文档,我就不废话了,直接介绍如何使用我的…
前言: 在一些特定场景下,我们获取到的音视频,由于格式比较特殊,用avplayer等播放器是无法播放的,此时,我们可以借助强大的VLC播放器来处理. 原理这里不再赘述,下面我们讲一下如何添加VLC播放器代码. 封装功能: 1.视频播放.暂停.重播 2.视频快进.快退(进度条和手势) 3.音量和亮度的调节 效果图: 正文: 1.首先我们需要vlc的Framework,最简单的就是pod获取 platform:ios,'8.0' use_frameworks! pod 'MobileVLCKit'…
  [文章原地址]http://mobile.tutsplus.com/tutorials/iphone/ios-quick-tip-5-tips-to-increase-app-performance/人翻胜于机翻,本着练习英语的目的翻译iOS相关的文章,看官切勿见笑.本人将在文章的部分地方添加注释,并根据需求增减文章内容,在此对原作者辛勤劳作表示感谢 iOS Quick Tip: 5 Tips to Increase App Performance Bart Jacobs on Jul 19…
在iOS中音频播放从形式上可以分为音效播放和音乐播放.前者主要指的是一些短音频播放,通常作为点缀音频,对于这类音频不需要进行进度.循环等控制.后者指的是一些较长的音频,通常是主音频,对于这些音频的播放通常需要进行精确的控制.在iOS中播放两类音频分别使用AudioToolbox.framework和AVFoundation.framework来完成音效和音乐播放. 音效 AudioToolbox.framework是一套基于C语言的框架,使用它来播放音效其本质是将短音频注册到系统声音服务(Sys…
近日需要实现移动端页面额外功能按钮,即点击加号弹出点赞与留言功能,通常这个按钮都会固定于页面的右下角,首先就想到使用固定定位来实现. 但是在测试时我们发现,在IOS中,当系统键盘弹出时,fixed会失效,加号按钮会随着键盘的弹出,而被顶到键盘的上方.后来在网上搜索了一下,发现很多开发者都有遇到过这个问题,因为电商网站会有很多这种需要用到固定定位的场景,于是去到淘宝的移动端页面,发现他们是通过使用绝对定位来实现固定定位的效果.方法如下: 页面结构如图 首先设置一个box,大小等于页面窗口的大小,设…
写移动端的时候发现input的虚拟键盘对Ios的手机不是很友好 我的是苹果6 点击的时候经常会挡住input框 针对这个问题找了很多发现都没效果 最后发现用下面这段js就可以解决了 $("input").focus(function () { setTimeout(function () { $(window).scrollTop(window.innerHeight); }, 500); }); 这里有个问题就是会延迟500毫秒 不过能解决问题就行…
假设,你正在开发一款iOS应用. 你的iOS应用有很多动画效果,而你(或你的设计师)希望让那些动画效果的持续时间恰到好处.那华丽的抽屉特效是应该耗时半秒钟,还是四分之三秒呢? 通常情况下,开发者会对合适的时间进行猜测,编译他们的应用程序,测试,修改,重新编译,清理,调整,周而复始.鉴于复杂的应用可能需要相当长的时间来进行编译,那些小小的变化就会开始吞噬你的时间,你开始痛恨进度条. 为什么要为了如此简单的东西进行重新编译呢?如果负责调整时间的人的角色更多的是设计师,而不是程序员,那会怎样呢?他们应…
你会不会遇到通过断点查看数据源模型的确刷新了,但是tableview没有刷新的情况,我遇到了,并通过下面的方法解决了,供大家参考! 在tableview中的数据源代理方法 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo } span.s1 { } span.s2 { font: 11.0px Menlo; color: #703daa } - (UITableViewCell *)tableView:(UITableView…
A.从ViewController分离View 之前的代码中,View的数据加载逻辑放在了总的ViewController中,增加了耦合性,应该对控制器ViewController隐藏数据加载到View的细节.     封装View的创建逻辑     封装View的数据加载逻辑到自定义的UIView中   B.思路 使用xib封装自定义view的步骤: 1.新建一个继承UIView的自定义view,这里的名字是"AppView",用来封装独立控件组 每个AppView封装了如下图的控件…
我用一个单例类将一些常用的网络请求进行了二次封装,主要包括post请求 get请求  图片文件上传下载  视频的断点续传等功能. 首先大家先去github上下载AFN,将文件夹内的AFNetworking文件夹拖入工程中,然后创建一个图片文件参数类代码如下: #import <Foundation/Foundation.h> @interface UploadParam : NSObject /** * 上传文件的二进制数据 */ @property (nonatomic, strong) N…
C语言是基于过程的一种编程语言,而OC语言是基于对象的一种语言. C是和其他的面向对象的语言的区别在于C语言更注重地层操作,思维方式相比面向对象的语言而言更接近机器的思维方式,而面向对象的语言更接近于人的思维方式. 人的思维方式就是对不同的事物进行分类,比如人类.鸟类等等,人类中又细分出男人,女人,或者从另一个角度来说分为好人和坏人.这就是类,把有相同属性的事物归为一类. 以人类为例,人类中每个人都有年龄.身高.体重.姓名.性别等,这写东西就是人类的属性,而人类还有一些共同的能力,比如吃饭.喝水…
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 本文主要演示Android-PickerView的选项选择器.时间选择器的简单运用.由于每一个版本略有不用,所以实际使用方式以github项目wiki文档为准. 效果图      代码分析 本文使用的版本是compile 'com.contrarywind:Android-PickerView:4.1.4': 时间选择器搭配DateTimeHelper使用: 需要执行setDecorView方法,否则底部虚拟导航栏会显示在弹出的…
下载地址 http://pan.baidu.com/share/link?shareid=2894506499&uk=923776187 引用这几个文件 radiobutton.封装好单选按钮 DataPicker  封装好选择器 jiugongge  九宫格 commonButton 这个是公用的button. nsCategory 使用方式 #import <UIKit/UIKit.h> #import "RadioButtonExt.h" @interface…
下载地址  http://pan.baidu.com/share/link?shareid=2902188921&uk=923776187 GDataXML和TFHpple配置是一样的(配置方式参考 http://blog.csdn.net/ryantang03/article/details/7868246) 主要封装代码 html封装 #import <Foundation/Foundation.h> #import "TFHpple.h" @interface…
一.view封装的思路: *如果一个view内部的子控件比较多,一般会考虑自定义一个view,把它内部的子控件的创建屏蔽起来,不让外界关心 *外界可以传入对应的模型数据给view,view拿到模型数据后给内部的子控件设置对应的数据 二.封装控件的基本步骤--四步 1>添加子控件(子控件也可通过懒加载实现) *在initWithFrame:方法中添加子控件,提供便利构造方法 ps--init方法内部会调用initWithFrame:方法,所以说外部调用的时候直接用init调用 @interface…
常见bug及其修复方法有以下几种 1.双外边距浮动bug 双外边距浮动bug在IE6及更低版本中常见.所谓双外边距浮动bug是指使任何浮动元素上的外边距加倍.(见下图) 只要将元素的display属性设置成inline就行了.因为元素时浮动的,所以将display属性设置为inline实际上不会影响显示方式.但是,这似乎会阻止Windows上的IE6及更低版本将所有外边距加倍.所以每当对具有水平外边距的元素浮动时,都应该很自然的将display属性设置为inline,以备外边距将来被加大. 2.…
excel02.py # -*- coding: utf-8 -*-#@File :excel_oper_02.py#@Auth : wwd#@Time : 2020/12/7 8:16 下午import xlrd3workbook = xlrd3.open_workbook('test_data_02.xlsx')sheet = workbook.sheet_by_name('Sheet1')# 做成方法def get_cell_merged_value(row_index,col_index…
如我上一篇文章记录,我加了打开其他APPtxt文件的小功能,紧接着碰到新问题了,我在测试过程中发现用户上传的TXT编码格式很多不单单是utf-8和gb2312,针对TXT文档进行解码,我一共经历过两个阶段,如下 1.通过循环 解码不为空就返回字符串 NSArray *encodings = @[ @(NSUTF8StringEncoding), @(0x80000632), @(0x80000631), @(kCFStringEncodingGB_2312_80), @(kCFStringEnc…
DMBasicDataModel.h #import <Foundation/Foundation.h> @interface DMBasicDataModel : NSObject - (id)initWithDictionary:(NSDictionary *)dictionary; @end DMBasicDataModel.m #import "DMBasicDataModel.h" @implementation DMBasicDataModel - (id)in…
#waring ---(看官注意) ---使用说明: ①在创建自定义model类之前让该类继承自文件中的Model类, ②为model类选一个NSString属性作为主键:(既,在初始化方法里面将从父类Model类 ID属性等于你所选的NSString属性值即可 (具体可参见.下文  二.3 中) 一.文件夹结构: 二.文件说明: 1.NSObject+NSCoding 该文件是对对象类型进行encoding 以及 decoding操作的方法 2.DataHandle 1. 该文件是 sqlit…