一般我们都是可以看到ios开发中的tableView的内容,相应的架构的书写我们应该很熟:
1、一个我们在一般的工具上都是以代理为基础,然后实现相应的点触摸的功能,也就是动手了之后的相应时间,这个要写成相应的代理让其在controller类中具体操作。(人动而界面动)
2、由于我们一般都是继承view以及其子类,所以我们是可以以视图为基准,这样我们就能够实现了有关的类似tableView的功能。(设置相应的代理,我们可以设置为代码的设置方式,也就是直接协商delegate,但是同时也通过IBOutlet这个关键字来实现可以拉得delegate的方式)
3、因为我们经常是使用xib结合的,所以我们也会实现加载xib的方法,这样我们就可以实现了相关的概念。所以我们在拉约束的时候,我们在代码中需要实现相应的常量控制。
eg:
/* Create constraints explicitly. Constraints are of the form "view1.attr1 = view2.attr2 * multiplier + constant"
If your equation does not have a second view and attribute, use nil and NSLayoutAttributeNotAnAttribute.
*/
+(instancetype)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(nullable id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c;
尤其是会用到这个方法。
self.contentView.translatesAutoresizingMaskIntoConstraints = NO; 取消那个自动的布局
[self layoutIfNeeded]; 刷新布局
代理的触发就是判断一下代理是否实现了先关的方法:
if ([_clickDelegate respondsToSelector:@selector(doubleClickButton:didSelectrightButton:)]) {
//代理触发即为使用
[_clickDelegate doubleClickButton:self didSelectrightButton:sender];
}
加载xib的方法:
[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([GMDoubleClickButton class]) owner:self options:nil];
实现对xib进行加载,有的时候我们可能会获取firstObject,这样就可以获取第一加载的界面等等
4、就是使用,我们在使用的时候经常会在storyboard或者xib中拉入一个view ,也就是工具的父类,让这个view的拥有者是写入我们工具的类名。
然后我们可以通过view界面直接拉取delegate(如果有的话),否则我们需要代码进行设置。
然后实现相应的代理方法,这样我们就可以通过相应内容来实现。实现工具的想过,完全和UItableView一样。
(可能UItableView中可能是使用了两套的,和我们写的delegate的设置有点区别,但是原理是一样的,可能在实现拉取delegate的时候和代码写的都可以,内部实现了两套方案)