ios中的開發一些小工具(就是一個寫UIView的自定義組件的脫離環境,可以重新使用)解耦

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



發佈了144 篇原創文章 · 獲贊 11 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章