首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

成为一名优秀 Swift 开发人员 10 个小技巧

使用 Objective-C 时,我总是情愿地使用继承。当然这并不总是错误,正确使用子类也不会出错。但是 Swift 扩展可以轻松地将简单方法集成到通用类,而无需做任何复杂事情。...但作为开发人员,需要记住两点: 首先,不要让导航过于复杂,除非有简单方法可以返回主页可撤消操作,否则不要在模态再展示模态,也不要在 UINavigationController push 多个组件...事件操作中 sender 参数非常有用 最后一个技巧是使用 sender 参数。每个响应事件方法或选择器都可以知道是谁触发了事件。...只需要将所有 UIButton 连接到相同 @IBAction,然后使用发送方找出触发了该事件中哪一个,并为该特定行为编写正确实现即可。...此外, UI 元素使用 tag 来标识它们,而不是使用其标题或其它内容来区分。 结论 我没有提到所有基本 OOP 原则。显然,您必须正确方式实现类,封装,抽象和设计模式。

2.2K40

【 iOS 应用开发 】 UIKit 控件 ( UIView 属性 | storyboard 设置 | 模拟器 | 拖线关联 | tag | 软键盘操作 | 颜色值 | 代码生成控件 | 动画设置 )

, 拖到制定控件处, 这样 ViewController.h 中属性与 Main.storyboard 中控件建立起了关联; ① 属性左侧圆圈图示 : 第一张是鼠标没有移动到圆圈, 第二章是鼠标移动到了圆圈...属性并关联界面 : 同上面的操作, 创建第二个属性, 关联 ViewController.h 中属性与 Main.storyboard 中属性; 4.创建 Label 属性 并关联界面 :....退出软键盘方式 : 两种方式 ① 哪个 TextField 触发, 通过对应 TextField 控件 关闭键盘; ② 通过 父控件 关闭 软键盘; ① 谁触发谁关闭 : 调用控件 resignFirstResponder...All rights reserved. // #import "ViewController.h" @interface ViewController () //定义要操作主要按钮, 即显示头像按钮...: 按住 control 键, 按住鼠标左键拖线 从 UIButton 控件 到 ViewController.m 中, 弹出对话框中设置对应参数, 方法名, 控件类型, 参数 等; 生成代码

4.6K30
您找到你想要的搜索结果了吗?
是的
没有找到

iOS 事件传递和处理

不同事件响应链中处理方式不同,这里我们主要分析touch事件传递和处理。 用户点击手机屏幕过程 App外:用户点击->硬件响应->参数量化->数据转发->App接收。...2、如果给UIButton添加Tap手势,点击UIButton时候是触发UIButtonTap手势,还是触发UIButton点击回调?...UIButton是UIControl子类,通过追踪touch事件变化得到一些UIControl定义事件(UIControlEvents);UIButton点击操作是通过UIControlEvents...2、如果给UIButton添加Tap手势,点击UIButton时候是触发UIButtonTap手势,还是触发UIButton点击回调?...上文分析了手势识别是发生在响应链回调之前,也就是tap手势是发生在touches系列方法回调之前,那么Tap手势应该是UIButtontouches方法之前。

1.4K20

【IOS开发基础系列】UIViewController专题

当程序接收到内存警告时,controller会尝试卸载view,卸载循环中,controller尝试释放它view对象并返回到原始无view状态(当它不在屏幕显示时,这个条件判断到底是根据view...(iOS3.0以后建议重载这个函数来进行额外清除操作,使用viewDidUnload).         b) 默认实现会在确定可以安全地释放view时释放掉view。         ...所以我们用标准方式呈现和解散这个VC: //MainViewController.m - (void)viewDidLoad {     [super viewDidLoad];     // Do...而在这个操作过程中,我们甚至可以撤销我们手势,取消这次VC转移。...刚才demo基础,这次我们用一个向上划动手势来吧之前呈现ModalViewController给dismiss掉~当然是交互式切换,可以半途取消那种。

31730

【 iOS 应用开发 】 UIKit 控件 ( 代码生成控件 | UIView 属性方法 | Storyboard | Bundle | Property List | 动画 | 图片内存优化 )

Name 栏 设置 方法名称 ; b . Event 栏 设置 方法触发动作 ; c . Touch Up Inside 即 点击方法 ; d ....; 有两种使用方式 , 一种是 直接创建指定所有参数 ; 第二种 可以之前基础上进行增量修改 ; ---- ( 8 ) 效果展示 效果展示 : ---- 三....代码区域 , 弹出对话框中 输入方法名称 , 选择控件类型 , 选择触发操作 , 选择传入参数 即可生成点击方法 ; // 一张 图片 - (IBAction)lastImage:(UIButton...: 动画执行 操作 会覆盖 一次 动画 , 每次 调用 startAnimating 都会 重新开始 执行动画 , 因此 当动画正在 执行时 , 不要覆盖 ; 使用 isAnimating 方法...: 1.首先判断 动画 是否执行 : 动画执行 操作 会覆盖 一次 动画 , 每次 调用 startAnimating 都会 重新开始 执行动画 , 因此 当动画正在 执行时 , 不要覆盖 ;

3.5K40

IOS开发之TabBarItem&NavigationBarItem

IOS开发中常用多视图间切换大致有TabBarController, NavigationBarController, 和模态窗口。第一次接触模态概念是Web前端内容中接触。...1.登陆页面的跳转实现     登陆ViewController中要跳转到TabBarController中需要根据用户输入信息来实现跳转。...换个说法,就是登陆页面storyboard中和其他页面是没有关系,需要我们用业务逻辑来实现,下面是用模态形式来进行视图切换。...关联完以后我们就可以相应试图控制器类中实现我们业务逻辑啦,操作如下: ?     3....我们可以通过storyboard通过拖拽方式来配置我们NavigationBar 也可以通过手写代码方式进行配置:     (1)用storyboard来为我们Navigation Bar添加按钮

1.3K80

View Controller编程指南

容器ViewController收集来自其他ViewController(称为子ViewController信息并以便于导航方式呈现或以不同方式呈现这些ViewController内容。...调节 ViewController负责呈现View,并使该呈现适应底层环境。每个iOS应用程序都应该能够iPad运行,并且可以几种不同大小iPhone运行。...UIKit期望您规定方式使用ViewController。 维护正确ViewController关系可确保自动行为需要时传递给正确ViewController。...容器型ViewController通常作为root ViewController安装在窗口中(如图所示),但它们也可以模态方式呈现,或者作为其他容器子项安装。容器负责适当地定位其子视图。...当涉及容器ViewController时,UIKit可能会修改链来简化您必须编写代码。不同演示风格对于它们屏幕显示方式有不同规则 - 例如,全屏显示总是覆盖整个屏幕。

1.2K20

实际操作-手把手探究tableViewCell控件点击事件进阶篇:实际项目操作

测试Cell控件点击事件 参与测试cell两个控件:一个UIButton,一个UIImageView。...---- -->探究1:点击Button时候,因为Buttoncell,是否会同时触发Button点击事件以及 cell行点击事件? ?...点按手势,触发cell行点击事件!...cellpush操作 如同,因为tableViewCell不是ViewController,没有navigationVC属性,并不能实现控制器push操作!...,发送请求,点击整个操作结束后,异步请求都不一定执行完,由于异步执行,数据经常是当时获取没完成就接下去执行了,导致数据为空;               3.2基础,执行完didSelectRowAtIndexPath

3.5K50

1.注册或登录页面设计:UILabel,UIButton,UITextField

最初学iOS时候苦于没有大神指点,全靠自己一点点摸索,确实走了很多弯路,希望还有小伙伴跟我一样走过多弯路。   ...作为iOS开发入门总结第一篇,这里最常见注册或登陆页面设计作为开篇,这里主要会用到UILabel,UIButton,UITextField这三个控件。...一.注册或登录界面 如下图,实现了一个注册或登录界面,这里先只介绍单个页面,介绍点击“完成”按钮后动作,之后系列《iOS开发入门总结》中会逐步介绍,等基础知识介绍差不多了,就可以一个完整注册系统作为小结...这类操作也非常普遍和重要。...触发了这个事件以后,执行butClick:这个方法,addTarget:self 意思是说,这个方法本类中 也可以传入其他类指针*/ [button1

2.3K50

iOS开发系列——Storyboard

: a.png 在这个界面中整个核心就是右侧视图控制器ViewControllerViewController中有一个视图UIView,这个视图用来放置其他用户操作控件。...那么如何在代码中读取两个TextField值并通过点击按钮触发相关事件验证登录合法性呢?...IBAction:其实就是void,只是当你定义为IBActionInterface Builder中可以关联到某个控件事件方法(后面的关联操作将会看到,而且我们代码中也可以看到代码前面多了空心圆点...控件右键找到对应属性或方法关联到代码中对应属性或方法即可,关联后属性或方法前空心圆变成实心表示已经关联到具体控件。...g.gif 如果要删除关联,可以采用第三、第四种方式控件右键,关联菜单中找到对应关联删除即可。

3.1K40

Cocoa编程中视图控制器与视图类详解

UIView是iPhone屏幕很多控件基础类。每个iPhone用户界面都是由显示UIWindow(这其实也是个特殊UIView)内众多UIView及其专门化子类构建。...UIActionSheet  所有控件(控件是将用户触摸转换为回调触发屏幕对象。)...;   提示:UIViewController 有一个属性是navigationController,如果当前ViewController某个NavigationController堆栈中 的话(即是被推送过来...选项卡类方便之处就是不需要象导航栏那样方式推入和弹出视图操作,而是组建一系列控制器(它们各自可以是UIViewController、UINavigationController、UITableViewController...,让UITabBarController能够正常触发这些回调方法。

5K50

Swift:静态工厂方法

iOSUIKit和MacAppKit都为我们提供了创建具有原生外观UI所需所有基本核心构建块,但是我们经常需要自定义这些外观适合我们设计并为其定义布局。...我们要做 UILabel 添加一个扩展,使我们能够从上面创建与 TitleLabel完全相同设置新实例,如下所示: extension UILabel { static func makeForTitle...尤其是使用子视图控制器时,我们通常最终会得到一组视图控制器,它们只能在其中呈现特定状态,而不是在其中包含大量逻辑。对于那些视图控制器,将其设置移动到静态工厂API可能是一个很好解决方案。...特别是如果与"Swift:将子视图控制器用作插件" 中便捷API稍加修改版本结合使用,我们现在可以执行异步操作时轻松添加预先配置加载视图控制器: class ProductListViewController...尤其是测试依赖于特定模型配置代码时,很容易充满样板测试结束,这使它们更难以阅读和调试。

2.3K10

iOS 中block结构简单用法 原

也有两种方式: 1、-(void)func:(int (^)(int a,int b))block; 第二种方式是通过typedef定义一种新类型,这也是大多数情况下采用方式: 2、typedef...,会访问到block自己拷贝那一份变量,它是block创建时候创建,而访问加了这个关键字变量,则会访问这个变量地址所对应变量。...3、一点点扩展 由此,我们可以理解,如果block中操作对象是指针,那么直接可以进行修改,这包括OC对象,如果不是,则需要用__block关键字修饰。...注意:根据这个机制,如果我们将block用来传值,block不用时,务必要置为nil,而在实现block方法里,务必要释放;我们通过代码来解释: 首先,创建三个ViewController,为ViewController1...,ViewController2,ViewController3; 1、ViewController1中创建一个按钮,跳转ViewController2 2、ViewController2中: #import

55630

Container ViewController自定义转场控制器。

前言 最近接触到新公司老项目改版。自从来了之后一直忙另一个项目,也没有看老项目的实现逻辑。 看到设计稿时候,并不是普通树形标签导航样子。大致效果如FaceU主页: ?...经同事指导,最后找到Container View Controllers Quickstart,才发现一种新转场实现方式。下面就动手实践一下。...打开viewController.m创建两个UIButton: @interface ViewController () @property (nonatomic, strong) UIButton *...`viewcontroller.m中引入,并添加如下属性方法: // 记录当前是哪个vc @property (nonatomic, strong) UIViewController *currentVC...相对应右侧弹出实现方式一样,只是把Frame更改下,就可以实现从右侧弹出效果。具体代码就不贴了。 如果想回到主页,只用写个移除self.currentVC方法,调用下就可以了。

68910

36.Swift学习之Associated Object

介绍 Swift 可以利用 OC runtime 和 KVC ,在运行时向一个对象添加值存储,这种方式称之为Associated Object。...使用 extension 扩展现有类功能时,使用Associated Object方式,可以将一个值 “关联” 到已有的要扩展。该知识点在 iOS 开发中使用往往能优雅地解决很多问题。...,并且通过 & 操作符取地址并作为 UnsafeRawPointer 类型被传入,这在 Swift 与 C 协作和指针操作时是一种很常见用法。...,此时可以有如下几种方案: 创建 9 个按钮,逐一设置 通过 for 创建 9 个 UIButton,为 UIButton设置不同tag,然后点击事件里面用 switch case判断 自定义UIButton...,添加自定义属性 利用 Associated Object 绑定参数 class ViewController: UIViewController { // 不同参数 let

2.1K20

Runtime再理解

基于以上两点可知,类方法元类methodList中是以实例方法姿态存在!! 3,Runtime应用 很多人觉得Runtime很高大、很难学、很难理解、华而不实。...——消息转发流程 (3)提高OC对象序列化与反序列化效率:Runtime应用——序列化&反序列化 (4)Hook方法进行代码调试:Runtime应用——不修改原方法基础给原方法添加功能 (5)防止...但是一些特殊场景下,为了规避苹果审查,我们需要服务器数据来控制页面的跳转,即需要动态实现控制器获取或者创建,此时该怎么处理呢?...并不是说ViewControllerself就是ViewController或者其实例, *该消息给谁发送,也就是说,该消息接收者是谁,那么self就是谁 */ [self...并不是说ViewControllerself就是ViewController或者其实例, *该消息给谁发送,也就是说,该消息接收者是谁,那么self就是谁 */ [self

59920
领券