一般我們都是可以看到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的時候和代碼寫的都可以,內部實現了兩套方案)