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
图2SchoolA.Class和SchoolB.Class可以区分不同School中的Class类型.
示例代码分析
图1中的代码是不完整的,从代码中可以看出并没有定义Terrain等类型,但是这里声明了terrain 变量是一个字典类型,它的 key 是 Position 类型,它的 value 是 Terrain.Model 类型.
字典类型的简化语法有2中,一种是 Dictionary<Key, Value> ,一种就是 [Key: Value].
还有我们看到了这段代码中定义了一个字符串类型的枚举enum Size:String 这个是在OC当中是不存在的,这里参考内容枚举,里面有详细的介绍,非常厉害的Swift,非常神奇.
Swift学习 控件推荐
Ramotion 出品的滑动控件,带有弹出式气泡的滑块小部件。
下周推出使用方法和使用详情
网友评论