iOS單選框RadioButton實現

千客發表於2016-04-04

我們知道IOS是沒有類似RadioButton的單選框,So 我們來看下github 上start最多的專案RadioButton-ios的實現方式。

地址:GitHub – onegray/RadioButton-ios: Lightweight RadioButton class for iOS

先看效果圖:

 
RadioButton

接下來我們分析下原始碼:

這個專案只有兩個檔案:RadioButton.h和RadioButton.m,先看下RadioButton.h的內容:

 
RadioButton.h

其實也沒什麼,但是有個屬性就比較的特殊:groupButtons,他用了IBOutletCollection的實現方式。這個關鍵字,可以將介面上一組相同的控制元件連線到同一個陣列中通常情況下,我們使用一個IBOutletCollection屬性時,屬性必須是strong的,且型別是NSArray。具體想了解更多IBOutletCollection,可以參考:IBOutletCollection的使用方法 – CocoaChina_讓移動開發更簡單。這裡用IBOutletCollection主要還是為了方便能夠在IB中方便操作,其實用NSArray實現也是一樣的。

 
IBOutletCollection結合iB

RadioButton.m中最主要的方法

 
setGroupButtons方法

如果用IB方式進行組合的話,這個方法不需要你去主動呼叫。其實這個方法做的工作就是遍歷buttons,然後通過NSValue的valueWithNonretainedObject方法將buttons設定到sharedLinks陣列裡面。為什麼取sharedLink這個名字,主要是因為這些buttons引用的是同一個sharedLinks。之後其他的方法就是圍繞著sharedLinks去操作,並通過NSValue的nonretainedObjectValue獲取之前封裝的值。注意:這裡為什麼要多此一舉的用NSValue的兩個方法,其實這裡存在一個迴圈引用的問題,而NSValue的兩個方法就是為了弱化這層關係,大家可以好好琢磨。

 
選中操作

選中之後的操作會執行這幾個方法,主要是設定當前RadioButton選中狀態,然後迴圈便利其他RadioButton狀態為未選中狀態。如果是用IB進行操作的話,選中和未選中的狀態的背景可以通過如下圖方法設定:

 
設定選中和未選中的背景圖

如果理解有錯誤的地方,歡迎大家可以指出來,一起探討。

打賞支援我寫出更多好文章,謝謝!

打賞作者

打賞支援我寫出更多好文章,謝謝!

任選一種支付方式

iOS單選框RadioButton實現 iOS單選框RadioButton實現

相關文章