JavaScript 条件判断之 boolean 类型值的骚操作(!!)

前言

条件判断是我们在写代码时最常用的语法之一,如:

let n = 0
if (n) {}

let s = ''

阅读更多 >>

探索 el-table 中 tooltip 功能实现

el-table 中有个当内容超出一行时,会显示尾部省略号并且鼠标放上去会有 tooltip 提示效果的功能,现在我们就来探索一番,看下 el-table 是如何实现该功能的,最后我们再自己尝试仿照实现一个以加深理解。

阅读更多 >>

React Navigation 6.x 的使用

作为 react native 小菜鸡一枚,第一次接触 react navigation 路由框架,对其也是很懵逼,在不断探索学习中;由于平时都是用 Vue 进行开发,所以对 vue-router 比较熟悉一些,故而想着用 vue-router 路由表那一套用法来使用 react navigation,当然这个用法不是必须和唯一的,你可以根据你的习惯来开发即可。

阅读更多 >>

TypeScript 扩展基础类型

有时候为了方便,我们会对 JavaScript 内置的基础数据类型进行扩展,添加一些自定义方法。这里介绍下在 TypeScript 中如何进行扩展,添加代码提示。

目录结构

src

阅读更多 >>

TypeScript 中 type 和 interface 的异同

interfacetype 都是可以用来定义数据类型的,大部分场景下,能用 interface 定义的自然也可以用 type 定义,他们两者功能类似,却又有些许区别。

阅读更多 >>

微前端框架--qiankun初探

什么是微前端

Techniques, strategies and recipes for building a modern web app with multiple teams that can ship features independently. –Micro Frontends
微前端是一种多个团队通过独立发布功能的方式来共同构建现代化 web 应用的技术手段及方法策略。

阅读更多 >>

Web自动锁屏功能

Web项目中有一个自动锁屏的功能,当用户停止操作页面超过一定时间后,自动锁屏。

场景分析

首先我们确定下用户的操作有哪些:

  • 鼠标点击

阅读更多 >>

Unable to load script. Make sure you're either running a Metro (run 'npx react-native start') or that your bundle "index.android.bundle' is packaged correctly for release.

当通过 yarn run android 将 React Native 项目跑在 Android 模拟器上时,模拟器上报了如下错误信息:

Unable to load script. Make sure you're either running a Metro (run 'npx react-native start') or that your bundle "index.android.bundle' is packaged correctly for release.

阅读更多 >>

react-native-vector-icons 的使用

React Native 项目中会经常用到 react-native-vector-icons 来显示小图标,这里介绍如何在 iOS/Android 上使用该库。

阅读更多 >>

关于 react-native-snap-carousel 报 ViewPropTypes 的错误

环境

先说一下我当前的环境

  • react 18.0.0
  • react-native 0.69.1
  • react-native-snap-carousel 3.9.1

阅读更多 >>

TypeScript中的高级类型

对于熟悉 JavaScript 的开发者来说,要切换到 TypeScript 是很容易的,只需掌握 TypeScript 中的基础数据类型,然后在写代码时加上对应的类型即可。但是如果稍不注意就会导致很多地方都是用 any,最终把项目写成了 AnyScript,失去了 TypeScript 的意义。所以我们在掌握了基础类型后,更应该掌握一些高级类型,写出更加健壮的代码。

阅读更多 >>

Vue对接湖南省“互联网+政务服务”一体化平台统一身份认证

前因

领导给安排了一个任务,给湖南省XX市做一个电子证照的申报模块。

其实这功能分两部分,一部分是嵌入“我的XX” App 中进行使用的,App 提供了相关的 JS SDK,可以获取登录的账号数据,所以账号数据由 App 进行提供,这部分没什么好说的,三下五除二就给他搞完了。

阅读更多 >>

macOS 通过 brew 安装 Tomcat

这里是通过 Homebrew 来安装 Tomcat,不涉及通过其他途径的安装。

安装

    阅读更多 >>

    mockjs 的入门使用

    在做 web 项目时,常常会通过一些手段来模拟后台返回的数据,今天主要是介绍下 mockjs 的使用。

    安装

    npm i mockjs -D

    阅读更多 >>

    在Vue3+Vite项目中使用SVG图标

    在 Vue + Webpack 的项目中,可以通过 svg-sprite-loader 插件来使用 SVG 图标,但是在 Vite 项目下则行不通。

    vite-svg-loader

    通过 vite-svg-loader 插件可以将SVG图标作为组件使用。

    阅读更多 >>

    身份证号码那点事

    身份证号码的组成格式

    直接附上人民日报关于身份证号码格式的说明图片(一图胜过千言万语有木有):

    idcard.png

    阅读更多 >>

    el-table 在刷新页面后高度显示异常的问题

    最近在维护一个老项目的时候,发现这么一个有趣的问题,页面中使用了 el-table 这个组件来展示数据并且通过 height 属性设置了固定高度,如果是正常的点击跳转,表格高度也能正确地显示,但是只要你一刷新页面后,表格高度就会出现异常了,只能显示一条数据的高度。

    阅读更多 >>

    element-plus Loading 和 Message 组件在自动导入的情况下不显示

    最近在学习 Vue3 + ElementPlus,并且按照 ElementPlus 官方文档上的使用指南,采用了 自动导入 的用法,在其他组件比如 el-buttonel-icon 等组件均能正常工作,但是 Loading、Message 等这种以服务的方式来调用的组件却不能正常显示出来。

    阅读更多 >>

    在 Vue3 中挂载全局属性

    定义全局属性

    在 Vue2 中, Vue.prototype 通常用于添加所有组件都能访问的 property。

    Vue.prototype.$http = axios

    阅读更多 >>

    Vite 配置别名 @

    配置别名@

    我们在项目中 import 文件时都喜欢用 @ 这个别名来表示 src 这个目录,在 Vite 项目中,如何配置这个别名呢?

    阅读更多 >>

    Vue 全局引入 sass 文件

    前言

    现在的项目一般都会集成 CSS预处理器,不管用的是 SassLESSStylusPostCSS 中的哪一种,都能提高我们 CSS 的编写效率,也能使我们编写的 CSS 看起来更像是一个程序。

    阅读更多 >>

    iPhone 链接 macOS 不断闪烁

    当 iPhone 通过数据线连接 macOS 时,iPhone 的充电状态一直在闪烁,频繁的在 断开/已连接 之间不停地切换。

    如果重启电脑/手机、更换数据线都不能解决时,可以尝试把 usbd 服务停掉:

    sudo killall -STOP -c usbd

    阅读更多 >>

    iOS新项目企业签名打包报错

    工作了这么多年,还是今年第一次接触到苹果的企业账号打包 App,由于 app 不上架,都是通过企业签名方式打包,让客户通过扫码方式下载安装。

    错误提示

    由于是新项目并且是 Automatically manage signing 自动签名,当执行 Archive 打包时,给出了如下错误信息:

    阅读更多 >>

    Xcode13 在左侧项目目录结构树中没有 Products 文件夹

    以前老版本 Xcode,编译项目后会在左侧项目目录中有个 Products 的文件夹,里面包含了我们编译生成的 app 文件,但是更新到 Xcode13 之后,新建的项目你会发现在左侧目录中没有了这个 Products 文件夹,但是我们可以通过菜单快速定位到这个目录。

    阅读更多 >>

    极光推送在iOS正式环境收不到通知

    iOS app 中使用了极光推送,并且在 debug 模式下也能正常接收到通知消息,但是一旦切换到 release 正式环境下,则无法收到通知消息。

    主要原因是因为 JAVA 后台通过 SDK 调用极光接口时,apns_production 参数的值不匹配导致的,在后台代码中将该值设置为 true 即可。

    阅读更多 >>

    Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.

    之前在 GitHub 上进行 clone、push 等操作,都是通过 SSH keys 私钥的方式来进行操作,这过程中不需要用到 GitHub 的账号和密码,今天换了台电脑,在执行 push 操作时并在输入账号和密码后却报错了:

    remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.

    阅读更多 >>

    Unable to prepare iPhone for development

    Xcode 真机调试时突然提示:

    Please check the connection to the device, and review all errors in the Devices and Simulators window.
    

    阅读更多 >>

    WKWebView 与 JavaScript 进行通讯

    2020年4月起App Store将不再接受使用UIWebView的新App上架、2020年12月起将不再接受使用UIWebView的App更新。苹果已经彻底抛弃了UIWebView,所以我们不再讨论关于UIWebView的问题。

    苹果从 iOS8.0 为我们带来了全新的 WKWebView,WKWebView 为我们和 JavaScript 的交互带来了不一样的体验。

    阅读更多 >>

    Vue 导出 Excel

    最近做了一个和 Android 设备机进行交互的 Web 项目,基本原理是在 Android 上通过 AndServer 搭建一个 HTTP 服务器,然后把 Vue 项目打包进去,这样就可以通过网页和 Android 设备进行交互,配置一些常用选项、查看数据、导出数据。

    阅读更多 >>

    TypeError: this.getOptions is not a function

    昨天在把 uni-app 小程序项目从 HBuilderX 开发方式迁移到 VSCode 中来,当把项目依赖都安装好,执行 npm run dev:mp-weixin 开始编译到微信小程序平台时,终端报了以下错误信息:

     ERROR  Failed to compile with 1 

    阅读更多 >>

    Flex 设置横向滚动后元素宽度被压缩

    当给一个容器采用 flex 布局并且设置横向滚动的时候,当所有子元素的内容超出父元素的宽度时,子元素的宽度被压缩了,从而导致变形。

    需要给父元素设置 overflow-x: auto; 属性,然后子元素设置 flex-shrink: 0; 属性。

    阅读更多 >>

    [self class] & [super class]

    思考

    请问以下代码的运行结果是什么?

    @interface MYObject : NSObject
    @end
    
    @implementation MYObject

    阅读更多 >>

    Compiling IB documents for earlier than iOS 7 is no longer supported

    最近在苹果官方网站下载了一个 Demo,由于年代久远,Xcode 打开编译后,直接提示如下错误信息:

    Compiling IB documents for earlier than iOS 7 is no longer supported.
    

    阅读更多 >>

    解决集成百度OCR后,模拟器不能运行的问题

    模拟器报错

    由于项目需要识别银行卡信息和身份证信息,最终决定采用百度家的 OCR SDK,一共有三个库:

    阅读更多 >>

    免费 SSL 证书

    高能预警,本篇内容图片较多,无流量者请速速离开!!!

    阿里云提供了免费的 SSL 证书,我也一直有在用,只是到期后老是忘记去处理,就会导致浏览器在访问站点时进行安全提示,虽然可以通过点击 继续前往 链接打开站点,但这个提示总会让人心里发毛,到底安不安全(虽然我知道我的站点 100% 安全,但是别人不知道啊哈哈哈哈哈哈)。

    阅读更多 >>

    GCD面试题分享

    GCD 老生常谈的话题,下面分享几道面试题。

    某团面试题

    @property (nonatomic, assign) int num;

    阅读更多 >>

    Key-Value Observing(KVO)

    关于 KVO

    键值观察是一种机制,它允许对象在其他对象的指定属性发生更改时收到通知。

    Key-value observing is a mechanism that allows objects to be notified of changes to specified properties of other objects.

    阅读更多 >>

    Key-Value Coding(KVC)

    关于 KVC

    键值编码是由 NSKeyValueCoding 非正式协议启用的一种机制,对象采用该机制提供对其属性的间接访问。当对象符合键值编码要求时,其属性可以通过字符串参数通过简洁、统一的消息接口寻址。这种间接访问机制补充了实例变量及其相关访问器方法提供的直接访问。

    阅读更多 >>

    objc_class 中对 cache 属性的初探

    今天我们来探索下类的 cache 属性,cache 顾名思义就是 缓存,那么它到底缓存的是什么数据呢?

    cache 存的是什么?

    源码在手,天下我有!

    阅读更多 >>

    isKindOfClass & isMemberOfClass 的分析

    测试代码

    @interface MYObject : NSObject
    
    @end
    
    @implementation MYObject

    阅读更多 >>

    OC对象的原理(上) -- alloc的本质

    前因

    新建一个 iOS App 项目工程,然后先来看段代码

    MYObject *obj1 = [MYObject alloc];

    阅读更多 >>

    objc4-818.2 源码编译调试

    在平常的开发中,我们都只是知道有 objc 这个框架,为我们提供了一些底层接口(例如 runtime 以及 objc_msgSend 等);如果我们能够将 objc 源码跑起来,加上 LLDB 进行调试,就能够清晰的分析整个代码的执行流程。

    当前环境

      阅读更多 >>

      ping IP和端口

      macOS

      • IP
      ping 127.0.0.1
      

      阅读更多 >>

      修复 iOS 网页在拍照预览时图片被旋转的问题

      前几天用 uni-app 写了个上传图片的小案例(编译到 H5 端),当在 iPhone 上拍照上传时,发现在页面上预览的图片是发生了旋转的。

      图片的 Exif 信息

      Exif 全称 Exchangeable image file format,中文叫可交换图像文件格式,Exif 中存储了图片的方向信息。

      阅读更多 >>

      CSS设置宽高比

      <view class="scale-box">
          <view class="scale-box-content">
              <!-- content -->
          </view>

      阅读更多 >>

      iOS 验证码输入框

      特性

      • 支持自定义验证码长度(默认长度为6)
      • 支持切换键盘类型,适应纯数字、数字+字母等组合(默认为系统数字键盘)
      • 验证码输入完毕后自动收起键盘并通过block回调调用者

      阅读更多 >>

      通过 DOMSubtreeModified 事件接收 DOM 节点变化的回调

      需求场景:通过 WKWebView 加载第三方网页,其中有一个录制人脸视频的功能,为了用户体验需要默认调用前摄像头,然而第三方的网页我们无法调整,只能通过注入 JS 来修改 input 标签,将 capture 属性改成 user 即可调用前摄像头。

      网页内容是动态生成的,并不是写死的模板,所以需要监听 body 子节点发生改变的事件,每当 body 内容发生变更时,就去找出调用摄像头的 input 标签,找到之后动态修改它的属性。

      阅读更多 >>

      适配iOS13

      虽然苹果在今天推送了 iOS13.1.1 ,但还是简单记录下适配 iOS13 的过程吧。

      KVC禁止访问私有属性

      在 Xcode11 中苹果禁止了开发者通过 KVC 方式获取私有属性,如果你在代码中通过该方式访问了不该访问的东西,App 则会闪退并在控制台中可以看到如下错误信息:

      阅读更多 >>

      macOS中搭建PHP+MySQL环境

      请先安装 HomeBrew 工具

      安装PHP

      macOS自带了PHP,不过自带的PHP版本都是比较老的,我们可以通过brew工具来安装PHP并且不会与系统自带的PHP产生冲突。

      阅读更多 >>

      iOS 逆向之 Cycript 篇

      Cycript 是由 saurik 推出的一款脚本语言,可以看作是 Objective-C 和 JavaScript 的结合物,可通过 Cydia 安装。

      注入进程

      一般都是使用 cycript 来进行一些代码的测试,所以需要先把 cycript 注入到目标应用的进程中,通过如下方式注入:

      阅读更多 >>

      Homebrew

      Homebrew 是 mac 平台的软件包管理器,它允许我们通过 brew install xxx 的方式安装软件。

      安装 Homebrew

      官网 上有详细的说明,可以自行查阅。

      阅读更多 >>

      iOS 砸壳教程

      iOS 从 App Store 下载的应用都是加过壳的(只有从 App Store 下载的才是加壳的,系统应用和其他渠道下载的都是未加壳的),要想对应用进行逆向,首先得把这层壳去掉,俗称脱壳砸壳

      工具

        阅读更多 >>

        Sublime Text 报 There are no packages available for installation 错误

        前言

        最近升级了 Sublime Text 后突然安装不了插件了,卸载了重新安装还是照样报错。错误信息如下图所示:

        error.png

        阅读更多 >>

        Method Swizzling

        交换方法实现

        得益于 Objective-C 的 runtime 机制,method swizzling 这个黑魔法可以为我们在实际开发中解决诸多常规手段所不能解决的问题。

        阅读更多 >>

        基于阿里云 OSS 搭建 hexo 博客

        时间过的真快,转眼弹性Web托管服务也即将到期了,但是每年 RMB199 的费用确实有点高了,所以今年不打算续费了,转战 OSS。

        OSS 的计费方式分为 按量付费包年包月 两种方式,由于本站访问量实在是低,流量费用简直可以说是忽略不计,所以我采用了按量付费的计价方式。

        阅读更多 >>

        macOS/Linux 文本替换

        有时候我们需要将项目下的某个字符串全局替换成另一个字符串,可以借助 IDE 工具,当然也可以直接通过 grep + sed 命令完成。

        单文件文本内容替换

        sed -i "" "s/search/replace/g" filename

        阅读更多 >>

        Android 反编译

        可以从各大应用商店下载 apk 安装包

        获取 classes.dex 文件

        将 apk 后缀改成 .zip,然后解压出来的文件就会包含 classes.dex

        阅读更多 >>

        setTimeout 的时间限制

        函数定义:

        setTimeout(function, millisec);
        

        对于 setTimeout 函数的说明,不管是 w3cschool 还是 MDN 文档都未提及第二个参数 millisec 的取值范围,只是简单地说明该参数是一个需要延时执行的毫秒数。

        阅读更多 >>

        重载jQuery的ajax方法解决JSON解析的问题

        当服务器返回的JSON字符串中包含回车符等特殊字符时,ajax的解析会报错,导致程序执行异常。

        为了解决这个问题,在不侵入任何代码的情况下,只能替换 jQuery ajax 的方法实现了。

        将下面的代码复制到公共js的顶部,确保在发送网络请求之前就已经执行了替换操作,这样我们就能自定义解析服务器返回的JSON数据了。

        阅读更多 >>

        macOS's dark mode (暗黑模式)

        苹果在 macOS 10.14 中为我们带来了 dark mode (暗黑模式) 功能

        可以在 系统偏好设置通用 面板中开启暗黑模式

        判断当前主题是否为暗黑模式

        - (BOOL)isDarkMode {

        阅读更多 >>

        Charles进行HTTPS抓包

        当前环境:macOS 10.14.1 + Charles 4.2.7 + iPhone 7 iOS 12.1

        下载安装Charles

        前往 https://www.charlesproxy.com/download/ 下载对应平台的 Charles 软件。

        阅读更多 >>

        SDWebImage 4.x 播放GIF图片

        今天产品部的突然说 iOS 版 App 播放不了 GIF,一接到这个反馈信息,我一开始是不相信的,因为之前的旧版也是用的 SDWebImage 这个库且未做任何代码适配就能够播放 GIF,所以我内心是极不愿相信这是我的锅。

        新版 App 重构后也上线了两个多月了,这期间由于 App 未涉及到 GIF 的播放,所以一直未发现该问题(是我工作的疏忽)。

        阅读更多 >>

        微信小程序转发按钮的显示与隐藏

        在小程序就要上线之际,突然接到一个需求:只有登录的用户才能转发小程序。

        在一接到这个需求的时候,我内心是很拒绝的,一时间也是一脸懵逼态,无从下手。在我痛定思痛之后,发现了一对 API wx.showShareMenuwx.hideShareMenu,这对 API 能够显示/隐藏 当前 页面的转发按钮。

        阅读更多 >>

        为微信小程序增加通知机制

        当有多个页面需要监听某个状态(如:登录状态),当状态发生改变时,需要及时通知到每个监听者(页面),这就是通知机制。

        源码

        新建一个 NotificationCenter.js 文件,内容如下:

        阅读更多 >>

        微信小程序扩展 Page 对象

        对于 iOS 开发者来说,如果需要对一个类进行扩展,第一反应就是 runtime + category,有了这组合,我们简直可以为所欲为,为类添加属性、方法、重写某个方法都不在话下。

        阅读更多 >>

        UITabBar 点击刷新功能

        我们都知道 UITabBar 只能添加 UITabBarItem,而 UITabBarItem 是继承自 NSObject 的,但是我们可以发现 UITabBarItem 内部有一个 _view 属性与私有类 UITabBarButton 关联着,而这个 UITabBarButton 正是我们在 UITabBar 上看到的一个个按钮对象。

        阅读更多 >>

        修复 iOS12.1 UITabBar 布局错乱的bug

        此 Bug 是在 iOS 12.1 Beta2 版本中被引入的,没想到在 iOS 12.1 正式版中并未修复

        Bug触发条件

          阅读更多 >>

          iOS禁用第三方输入法

          当我们需要用户输入数字时,我们会将键盘类型设置为 UIKeyboardTypeNumberPadUIKeyboardTypePhonePadUIKeyboardTypeDecimalPad 等数字类型的键盘。但是如果用户使用了第三方输入法(比如搜狗),那就无法达到强制输入数字的目的了,因为搜狗输入法在这些 UIKeyboardType 枚举类型中,除了常规的 0~9 数字键外,还额外带了其他符号键,用户可以输入一些特殊字符,此时如果想要达到效果,就只能通过重写遵守 UITextFieldDelegate 并实现 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 方法,在这里通过正则判断用户输入的是否为数字。

          阅读更多 >>

          iOS 刘海屏适配

          今年苹果发布了三款 iPhone,分别为 iPhone XS、iPhone XS Max 以及 iPhone XR,尽管大家都在吐槽刘海屏,但是苹果今年已经是 iPhone 系列标配刘海屏了。

          虽然苹果为我们带来了更大屏幕尺寸的 iPhone XS Max 和 iPhone XR,尽管一个是6.5英寸一个是6.1英寸,并且 iPhone XS Max 的分辨率更是达到了 1242px × 2688px,但是对于我们开发者来说,这两者的物理尺寸都一个样,都是 414×896pt,而 6/7/8 Plus 系列的宽度也是 414pt,所以你可以把他们看作是 plus 系列的加长版。

          阅读更多 >>

          UIButton 被禁用时显示一个菊花提示用户正在加载中

          当点击按钮后,可能会执行一个比较耗时的操作,但是又不方便在整个页面进行提示时,此时如果我们仅仅只是把按钮禁用了以防用户重复点击,但是用户并不知道操作是否还在继续,用户体验不够友好;但是如果我们在按钮被禁用时,自动显示一个转圈圈的小菊花进行提示,那用户体验就会好很多,用户一看就知道当前操作正在进行中。

          阅读更多 >>

          解决 UIButton 快速点击后重复提交数据

          有时候我们快速点击按钮多次,会触发多次点击事件,最终导致数据提交多次,这是很没必要的。

          说明

          • 默认开启防重复点击功能,默认间隔时间 0.5

          阅读更多 >>

          UITableViewHeaderFooterView 修改背景色/文字

          注意点:

          • 修改背景色只能通过修改 contentViewbackgroundView 的背景色实现,修改 UITableViewHeaderFooterView 自身背景色无效果
          • 只能在 tableView:willDisplayHeaderView:forSection: 代理方法中进行设置,在 tableView:didEndDisplayingHeaderView:forSection: 设置无效

          阅读更多 >>

          iOS JSON解析换行符(\r、\n、\r\n)

          项目需要对JSON返回的换行符进行解析,系统提供了解析JSON的方法[NSJSONSerialization JSONObjectWithData:options:error:]
          AFNetworking 内部也是采用该方法来解析服务器返回的内容。所以,我只需要 hook 该系统方法,当解析失败的时候进行处理就行了,这样就可以一劳永逸,也无需修改其他地方的代码。

          阅读更多 >>

          为 NSArray/NSDictionary 优雅地过滤 nil 值

          作为一名 iOS 开发者,肯定知道 NSArray/NSDictionary 不能存储 nil 值,如果你试图往数组/字典中存储 nil,那么 App 也将毫不客气的为你闪退。

          尽管在日常的编码中,我们都会小心翼翼的处理 nil,但是总会有纰漏,毕竟大部分数据都是从服务器下发的,我们很难彻底把控。作为一名码农,肯定是想着怎么偷懒的,既能自动规避 nil,又能够不影响现有代码,最好不用引入第三方方法。得益于 Objective-C 的 runtime 机制,我们可以很优雅地通过 Method Swizlling 来解决上述问题。

          阅读更多 >>

          iOS Haptics Feedback (触感反馈)

          要求

          • iOS 10.0+
          • iPhone 7/7P 或更新机型
          • 打开”设置–声音与触感–系统触感反馈”选项

          阅读更多 >>

          WKWebView在iOS9上崩溃

          最近项目重构,所以采用了 WKWebView 来展示网页内容,但是发现在 iOS9 上程序会出现 crash,以前也用过 WKWebView 但是都没遇到这么坑的情况啊。

          具体操作:通过 push 网页控制器,然后在 pop 之后,程序就崩了。

          打断点也定位不到 crash 代码行,打开 Xcode 的僵尸模式之后,控制台也仅输出以下信息:

          阅读更多 >>

          iOS地铁图

          使用了高德地图的JS API,文档戳这里

          原理

          通过 WKWebView 加载一个 HTML 字符串,通过注入 JS 在页面加载完毕后加载高德地图的JS库,然后创建地铁地图,同时通过JS库提供的 getCityList 接口获取所有的城市信息,然后把城市数据回传给 Objective-C,OC 在拿到数据后在右上角添加一个切换城市的按钮,当选择所要切换的城市后,通过 WKWebView 调用 JS 代码并把城市 id 传递给 JS,JS 拿到数据后通过 setAdcode 接口来切换地铁数据。

          阅读更多 >>

          十六进制字符串转UIColor

          支持十六进制字符串的格式有:

          • #FFF
          • #FFFF
          • #FFFFFF

          阅读更多 >>

          修改DZNEmptyDataSet按钮的宽高

          相信没有哪款App是没有使用到滚动视图(UIScrollView、UITableView、UICollectionView)的吧,我相信大家用的最多的就是UITableView了,当需要展示列表数据时,我想大家第一次时间想到的就是UITableView。

          如果数据不为空的时候还好,可谁也不能保证一定会有数据展示吧,如果没数据的时候,就会给客户呈现一个空白页面(白板),此时我们可以给用户一点提示信息(图片、文字),这不仅可以提升用户体验,也不至于让用户一脸懵逼。

          阅读更多 >>

          使用 unwind segues 关闭当前页面

          我们经常会遇到这样一种需求,在控制器上有一个关闭按钮,点击来关闭当前页面。而我们通常的做法都是在 Storyboard 上拖一个 UIButton 出来,然后将 UIButton 拖线到控制器上,新建一个 IBAction 方法,并在该方法中通过代码来关闭当前控制器。

          其实,我们可以不需要这么麻烦,可以通过 Unwind Segue 在 Storyboard 上拖拖线即可达到关闭控制器的效果。

          阅读更多 >>

          在Markdown中创建表格

          越来越多人采用Markdown进行写作,而表格作为一种比较常见的需求,Markdown也支持快速创建表格。

          语法:

          | Name | Score |
          | :- | :-: |
          | zhangsan | 90 |

          阅读更多 >>

          博客搬迁至阿里云

          前因

          清明假期前,收到阿里云发来的邮件,说我的域名未指向阿里云国内节点(不含香港)服务器,根据工信部相关法规规定属于空壳网站,需要我尽快处理,否则将删除网站备案接入信息,甚至网站备案号有可能会被注销。

          阅读更多 >>

          Swift选项集合(OptionSet)

          Objective-C中的NS_OPTION宏

          对于iOS开发者来说,NS_OPTION这个宏应该都不会陌生吧,这个宏给我们的开发带来了极大的便利。

          阅读更多 >>

          UICollectionView瀑布流布局

          仅作为学习交流之用

          环境

          • Xcode9.0+

          阅读更多 >>

          iOS从通讯录中复制粘贴电话号码携带特殊字符

          在做收货地址的功能,其中有个场景就是用户先从手机通讯录中拷贝了某个电话号码,然后将其粘贴到输入框中。一切看似正常,但是这里有个问题,从通讯录中拷贝的电话号码,自带了特殊的不可见unicode字符,如果你不打断点查看变量值,压根不会看到这些特殊字符。

          特殊字符

          这些特殊字符在OC和Swift中有不同的表现形式:

          阅读更多 >>

          Swift截取子字符串

          在Swift中截取子串,一直是个头疼的问题,毕竟牵涉到String.Index这个鬼东西,而且API还不好用。现在连substring(to:)substring(from:)substring(width:)这几个方法也被废弃了。

          阅读更多 >>

          Swift4之Codable协议

          最近公司新项目采用了Swift开发,在处理JSON数据时,一开始是准备采用阿里开源的HandyJSON,后来了解了下,随着Swift4的到来,苹果为我们带来了Codable协议,用于数据的编解码,虽然现在的Codable并不完善,使用上也并没有那么的友好,但是毕竟是官方出品,后期肯定会越来越完善的,所以决定采用Codable而弃用HandyJSON。

          阅读更多 >>

          SafariServices框架

          相信大家在日常开发中,都离不开web吧,部分页面还是得用网页进行展示。在iOS7和之前我们可以用UIWebView来加载网页,在iOS8 Apple为我们带来了WKWebView(WebKit框架),而在iOS9 Apple为我们提供了进一步的封装库SafariServices。

          SafariServices的可定制性很差,可以说毫无定制性可言,我们只能控制一下导航栏和底部工具栏的颜色,以及通过SFSafariViewControllerDelegate可以添加自定的分享功能(UIActivity)。

          阅读更多 >>

          iOS编译MobileVLCKit.framework

          我的编译环境

          • macOS 10.12.6
          • Xcode9.2

          编译MobileVLCKit.framework静态库

            阅读更多 >>

            iOS更改App图标

            苹果在iOS10.3系统中为我们带来了更改App图标的功能, 主要接口定义如下:

            // Pass `nil` to use the primary application icon. The completion handler will be invoked asynchronously on an arbitrary background queue; be sure to dispatch back to the main queue before doing any further UI work.

            阅读更多 >>

            iOS打开QQ临时会话窗口

            前提条件:接收临时会话的QQ号码必须开通QQ推广功能,否则不能打开临时会话窗口。

            公司项目在商品详情页面中,有一个客服按钮,点击后需要打开客服MM的QQ聊天窗口,在此可以向客服MM咨询商品相关的问题。这里就记录下iOS如何跳转到QQ的聊天窗口。

            阅读更多 >>

            UIColor转UIImage

            没啥好说的,直接看代码

            ⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇

            .h头文件

            @interface UIImage (Color)

            阅读更多 >>

            UITextView禁用回车符

            最近项目有个需求,需要在UITextView中禁止用户输入回车符,因为后台不会过滤回车符号,所以当AFNetworking请求数据时,如果返回的数据中包含了回车符,那么JSON解析将会失败。既然后台不处理,那没办法,只能在UITextView上禁用回车符了。

            我们需要解决以下问题:

            阅读更多 >>

            IB_DESIGNABLE引起Xcode编写代码时异常卡顿

            最近升级了Xcode9之后,发现Xcode经常性卡顿,菊花常现,已经严重影响到代码的编写了,一开始还以为是Xcode9的问题,后来在网上搜索了下,原来老版本的Xcode就存在这个问题,而且是由于IB_DESIGNABLE这个系统宏导致的。

            当我们在自定义视图的定义前面用了IB_DESIGNABLE这个宏来修饰,就表明了我们这个视图是可以在SB/XIB中实时预览的,本来这是一个很好用的功能,我们直接修改了视图代码就可以在SB上直接渲染出来,这真是所见即所得,简直棒到没朋友。但是这功能确实也坑了我们一把,当我们在编写代码时,只要修改了源码,哪怕只敲了一个字符,Xcode也会自动重新编译SB文件,这就很尴尬了,当我们不断敲代码的时候,Xcode就不断地重新编译SB文件,最后导致Xcode异常卡顿。

            阅读更多 >>

            UITableViewCell长按拷贝菜单选项

            运营推广人员向我们反馈说需要一个能方便拷贝会员手机号码的功能,方便进行其他操作。由于会员信息是采用UITableView来进行展示的,而系统已经为我们准备好了UITableViewCell长按功能菜单的API,我们只需实现对应的代理方法即可。

            阅读更多 >>

            iOS11保存图片应用闪退

            今天产品经理向我反馈在iOS11上点击保存图片后App闪退了,通过调试发现控制台输出了如下错误信息:

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

            阅读更多 >>