用于Xcode使用的iOS通用代码片段,其中也包含若干专用于QMUI iOS框架的代码片段。
qmui-ios-codesnippets 是一个 QMUI 团队日常工作中整理出来的用于 Xcode 的 iOS 通用代码片段集,其中也包含若干专用于 QMUI for iOS 框架的代码片段。
整理这个代码片段集的初衷有以下几点:
super
,从而出现一些很难排查的诡异bug。swizzle
来重写系统控件的方法、block 在不同地方的语法不同等。Xcode 的 Code Snippets 文件存放于 ~/Library/Developer/Xcode/UserData/CodeSnippets
目录,只要直接把 *.codesnippets
文件放到这个目录下(若没有则自己创建),重启 Xcode 即可生效。
为了方便更新,建议直接将 QMUI iOS CodeSnippets clone 到这个目录内(注意,不是在 CodeSnippets 里创建一个 QMUI 的目录,这里不支持子目录):
cd ~/Library/Developer/Xcode/UserData/CodeSnippets
CodeSnippets 目录为空:
git clone https://github.com/QMUI/QMUI_iOS_CodeSnippets.git ./
CodeSnippets 目录不为空:
git init .
git remote add origin https://github.com/QMUI/QMUI_iOS_CodeSnippets.git
git pull origin master
其中以 QM_
前缀开头的文件是通用的 Code Snippets,以 QMUI_
前缀开头的文件是专用于 QMUI for iOS
框架的代码片段。在下方的快捷键汇总里,QMUI 的代码片段将会以QMUI的形式标记出来。
注意,Xcode 对每一段 Code Snippet 都有规定适用的语言(Objective-C、Objective-C++、Swift、...)和作用域(如 Class 的 Interface 定义内、Class 的 Implementation 内、方法体内、...),所以测试某段 Code Snippet 不生效时请注意你当前是否处于不匹配的位置。
NSObject
pa
- 定义一个 assign
的 propertypar
- 定义一个 assign, readonly
的 propertypc
- 定义一个 copy
的 propertypcr
- 定义一个 copy, readonly
的 propertyps
- 定义一个 strong
的propertypsr
- 定义一个 strong, readonly
的propertypw
- 定义一个 weak
的propertypwr
- 定义一个 weak, readonly
的propertyload_once
- 创建一个带 dispatch_once
的 +load
方法propertySwizzleAssign
- 用 swizzle
的方式定义一个 assign
的propertypropertySwizzleCopy
- 用 swizzle
的方式定义一个 copy
的propertypropertySwizzleStrong
- 用 swizzle
的方式定义一个 strong
的propertypropertySwizzleWeak
- 用 swizzle
的方式定义一个 weak
的propertysharedInstance
- 为当前类创建一个实现单例功能的 sharedInstance
方法exchangeImplementation
- 重写当前类的 load
方法并在其中用 swizzle
替换方法实现exchangeImplementation_QMUI
- 用 QMUI 重写当前类的 load
方法并用 ExchangeImplementations()
函数替换方法的实现exchangeMultipleImplementations_QMUI
- 用 QMUI 重写当前类的 load
方法并用 ExchangeImplementations()
函数批量替换多个方法的实现override_void_non_argv
- 用 QMUI 的 OverrideImplementation()
重写指定 class 的某个无返回值、无参数的方法实现override_void_single_argv
- 用 QMUI 的 OverrideImplementation()
修改指定 class 的某个无返回值、带一个参数的方法实现override_void_two_argvs
- 用 QMUI 的 OverrideImplementation()
修改指定 class 的某个无返回值、带两个参数的方法实现override_return_non_argv
- 用 QMUI 的 OverrideImplementation()
修改指定 class 的某个带返回值、无参数的方法实现override_return_single_argv
- 用 QMUI 的 OverrideImplementation()
修改指定 class 的某个带返回值、带一个参数的方法实现override_return_two_argvs
- 用 QMUI 的 OverrideImplementation()
修改指定 class 的某个带返回值、带两个参数的方法实现extend_void_non_argv
- 用 QMUI 的 ExtendImplementationOfVoidMethodWithoutArguments()
修改指定 class 的某个无返回值、无参数的方法实现extend_void_single_argv
- 用 QMUI 的 ExtendImplementationOfVoidMethodWithSingleArgument()
修改指定 class 的某个无返回值、带一个参数的方法实现extend_void_two_argvs
- 用 QMUI 的 ExtendImplementationOfVoidMethodWithTwoArguments()
修改指定 class 的某个无返回值、带两个参数的方法实现extend_return_non_argv
- 用 QMUI 的 ExtendImplementationOfNonVoidMethodWithoutArguments()
修改指定 class 的某个带返回值、无参数的方法实现extend_return_single_argv
- 用 QMUI 的 ExtendImplementationOfNonVoidMethodWithSingleArgument()
修改指定 class 的某个带返回值、带一个参数的方法实现extend_return_two_argvs
- 用 QMUI 的 ExtendImplementationOfNonVoidMethodWithTwoArguments()
修改指定 class 的某个带返回值、带两个参数的方法实现Block
blockParameterInMethod
- 声明一个用于 OC 方法参数的 blockblockParameterInFunction
- 声明一个用于 C 函数参数的 blockblockproperty
- 声明一个用于 property 的 blockblocktypedef
- 用 typedef
定义一个 blockblockvar
- 定义一个作为局部变量的 blockMethod & Function
fnv
- 定义一个返回值为 void
的方法fnv:
- 定义一个返回值为 void
且带参数的方法fnblock
- 定义一个返回值类型为 block 的方法fnv_handleEvent
- 定义一个用于 UIControl
事件回调的方法fnv_longPress
- 定义一个用于 UILongPressGestureRecognizer
的回调方法(你就不用每次都去拼写那个很长的手势名字了)fnv_pan
- 定义一个用于 UIPanGestureRecognizer
的回调方法fnv_tap
- 定义一个用于 UITapGestureRecognizer
的回调方法UIView
setFrame
- 为 UIView
设置 frame
setFrame_QMUI
- QMUI 使用像素对齐的 CGRectFlatMake()
为 UIView
设置 frame
setFrameX
- QMUI 使用 CGRectSetX()
修改 UIView
的 frame.origin.x
setFrameY
- QMUI 使用 CGRectSetY()
修改 UIView
的 frame.origin.y
setFrameXY
- QMUI 使用 CGRectSetXY()
修改 UIView
的 frame.origin
sizeThatFits
- 为当前 view 创建 sizeThatFits:
方法layoutSubviews
- 展开 layoutSubviews
方法updateConstraints
- 展开 updateConstraints
方法getWidth
- 展开 CGRectGetWidth()
getHeight
- 展开 CGRectGetHeight()
getMinX
- 展开 CGRectGetMinX()
getMinY
- 展开 CGRectGetMinY()
addtarget
- 调用 UIControl addTarget:action:forEvents:
方法setImageForButton
- 为 UIButton
设置图片setTitleColorForButton
- 为 UIButton
设置文字颜色setTitleForButton
- 为 UIButton
设置文字UITableView
initWithStyle
- 展开 initWithStyle:
方法initWithStyleForCell
- 展开 UITableViewCell initWithStyle:reuseIdentifier:
方法tableViewDelegate
- 展开常用的几个 UITableViewDelegate
方法numberOfSectionsInTableView
- 展开 numberOfSectionsInTableView:
方法numberOfRowsInSection
- 展开 tableView:numberOfRowsInSection:
方法cellForRowAtIndexPath
- 展开 tableView:cellForRowAtIndexPath:
方法heightForRowAtIndexPath
- 展开 tableView:heightForRowAtIndexPath:
方法didSelectRowAtIndexPath
- 展开 tableView:didSelectRowAtIndexPath:
方法UICollectionView
collectionViewDelegate
- 展开常用的几个UICollectionViewDelegate
方法numberOfSectionsInCollectionView
- 展开 numberOfSectionsInCollectionView:
numberOfItemsInSection
- 展开 collectionView:numberOfItemsInSection:
cellForItemAtIndexPath
- 展开 collectionView:cellForItemAtIndexPath:
sizeForItemAtIndexPath
- 展开 collectionView:layout:sizeForItemAtIndexPath:
方法didSelectItemAtIndexPath
- 展开 collectionView:didSelectItemAtIndexPath:
方法didDeselectItemAtIndexPath
- 展开 collectionView:didDeselectItemAtIndexPath:
方法UIViewController
initWithNib
- 展开 initWithNibName:bundle:
方法didInitialize
- 展开某些 QMUI 控件提供的 didInitialize
方法didInitializeWithStyle
- 展开 QMUICommonTableViewController 的 didInitializeWithStyle:
方法loadView
- 展开 loadView
方法viewDidLoad
- 展开 viewDidLoad
方法viewWillAppear
- 展开 viewWillAppear:
方法viewDidAppear
- 展开 viewDidAppear:
方法viewWillDisappear
- 展开 viewWillDisappear:
方法viewDidDisappear
- 展开 viewDidDisappear:
方法viewDidLayoutSubviews
- 展开 viewDidLayoutSubviews:
方法updateViewConstraints
- 展开 updateViewConstraints:
方法addChildViewController
- 在当前 UIViewController
里添加 childViewController
removeFromParentViewController
- 将 childViewController
从当前的 UIViewController
里移除initSubviews
- QMUI 展开 initSubviews
方法setupNavigationItems
- QMUI 重写 QMUICommonViewController
里的 setupNavigationItems
方法setupToolbarItems
- QMUI 重写 QMUICommonViewController
里的 setupToolbarItems
方法UIBarButtonItem
backItem
- 用 QMUI 方法生成一个返回按钮boldTitleItem
- 用 QMUI 方法生成一个文字加粗的导航栏按钮closeItem
- 用 QMUI 方法生成一个导航栏上的关闭图标按钮imageItem
- 用 QMUI 方法生成一个导航栏上的图片按钮titleItem
- 用 QMUI 方法生成一个导航栏上的文字按钮Other
pragma
- 展开一个用于 Xcode 导航的 #pragma mark -
宏log
- 展开 NSLog(@"xxx")
osif
- 展开一个 @available(iOS xxx, *) 的 if 判断externRefInH
- 在 *.h
文件里声明一个 extern const
的指针externRefInM
- 在 *.m
文件里为一个 extern const
的指针赋值externValueInH
- 在 *.h
文件里声明一个 extern const
的值变量externValueInM
- 在 *.m
文件里为一个 extern const
的变量赋值static reference
- 定义一个 static
的指针static
- 定义一个 static
的值变量__weakSelf
- 定义一个 weak
的 self
指针__strongSelf
- 将 weakSelf
指针改为 strong
的 self
指针logCallStackSymbols
- 用 NSLog
打出当前的方法调用栈信息timeConsuming
- 展开一段用 CACurrentMediaTime()
来计算方法耗时的代码