iOS 知识点

一周技术回顾(2020.9.11)

2020-09-11  本文已影响0人  起名字让我很头疼

iOS 小知识

分享一个比较常用的知识点,点击某个UITableViewCell不执行-[UITableView didSelectRowAtIndexPath:]方法的几种方式:

1.可以直接设置cell.userInteractionEnabled = NO;

2.可以实现UITableViewDelegate中的-[UITableView shouldHighlightRowAtIndexPath:]方法,设置对应indexPath返回NO;

3.可以实现UITableViewDelegate中的-[UITableView willSelectRowAtIndexPath:]方法,设置对应indexPath返回nil,不过这种方式cell还是会有高亮效果,需要手动设置对应cell.selectionStyle = UITableViewCellSelectionStyleNone;

以上三个方法,都不会进UITableViewDelegate的-[UITableView didSelectRowAtIndexPath:]方法。

用第一种方式设置后,cell上的所有子View都不能被点击了;

而第二种方式不会影响cell的子View的响应事件的传递,如果cell上有UIControl的子类,依然可以被点击;

第三种方式也不会影响cell的子视图的响应事件,但是需要额外设置不显示高亮效果。当然,你也可以在-[UITableView didSelectRowAtIndexPath:]方法的对应indexPath直接return.

Swift学习 Tips 1

带有嵌套类型的命名空间

图1

代码出处: Namespacing with nested types

什么是嵌套类型

嵌套类型是指在某个类型中定义新的枚举,类或者结构体类型,这两个类型之间是嵌套的关系.

具体来说,要在一个类型中嵌套另一个类型,将嵌套类型的定义写在其外部类型的 {} 内,而且可以根据需要定义多级嵌套

那么图示中的 Map 结构体中包含了两个嵌套定义的结构体(Model,Position)和两个嵌套定义的枚举(Direction,Size)

什么是命名空间

命名空间的定义:是表示着一个标识符的可见范围,一个标识符可以在多个空间内定义,但是它在不同空间内的含义确不相同,而且互不想干,这样在一个新的命名空间内定义任意的标识符,这个标识符不会与任何已有的标识符产生冲突,因为它们属于不同的命名空间.

例如:A公司员工a的工号为"123",B公司员工b的工号也为"123",但是由于两个人在不同的公司.使用相同的工号来标识并不会产生影响.A和B两个公司就是两个独立的命名空间.

Swift中的嵌套类型和命名空间又有什么联系呢?

在Swift中并没有所谓的命名空间,但是可以通过嵌套类型,可以实现相同的效果,如:图2

图2

SchoolA.ClassSchoolB.Class可以区分不同School中的Class类型.

示例代码分析

图1中的代码是不完整的,从代码中可以看出并没有定义Terrain等类型,但是这里声明了terrain 变量是一个字典类型,它的 key 是 Position 类型,它的 value 是 Terrain.Model 类型.

字典类型的简化语法有2中,一种是 Dictionary<Key, Value> ,一种就是 [Key: Value].

还有我们看到了这段代码中定义了一个字符串类型的枚举enum Size:String 这个是在OC当中是不存在的,这里参考内容枚举,里面有详细的介绍,非常厉害的Swift,非常神奇.

Swift学习 控件推荐

Fluid Slider

Ramotion 出品的滑动控件,带有弹出式气泡的滑块小部件。

下周推出使用方法和使用详情

上一篇 下一篇

猜你喜欢

热点阅读