最近在改一些東西,跟UIButton的state有關,剛好作個筆記。
以下的列表,表示我點擊的順序,以及被呼叫的方法和帶入的變數,粗體字的部分代表是我所執行的指令帶來的結果。
因為我設定按鈕的狀態為selected,所以中間多了一個呼叫setSelected:的步驟,不然應該是會直接再次呼叫setHighlight:並且將highlight狀態設定為NO。如果我並不將按鈕設定成selected,那麼按鈕只會呼叫setHighlight:而已,並不會呼叫setSelected:,由此可知按鈕的邏輯,它事實上只有在default和highlight之間做切換而已。
但即使你想將點選的狀態處理在highlight裡面而已,也不是一個好主意,因為那畢竟只是代表著點擊的過渡狀態,當你手動設定setHighlight:為YES時,他其實會再一次呼叫setHighlight:並設定其為NO,所以你還是得把點選的固著狀態實作在setSelected:裡面。
以下的列表,表示我點擊的順序,以及被呼叫的方法和帶入的變數,粗體字的部分代表是我所執行的指令帶來的結果。
點擊狀態 | setSelected: | setHighlight: |
---|---|---|
不點擊 | X | X |
按著 | X | O(=YES) |
放開(設定selected) | O(=YES) | X |
放開(設定selected) | X | O(=NO) |
再次點擊 | X | O(=YES) |
放開(設定selected) | O(=NO) | X |
放開(設定selected) | X | O(=NO) |
因為我設定按鈕的狀態為selected,所以中間多了一個呼叫setSelected:的步驟,不然應該是會直接再次呼叫setHighlight:並且將highlight狀態設定為NO。如果我並不將按鈕設定成selected,那麼按鈕只會呼叫setHighlight:而已,並不會呼叫setSelected:,由此可知按鈕的邏輯,它事實上只有在default和highlight之間做切換而已。
但即使你想將點選的狀態處理在highlight裡面而已,也不是一個好主意,因為那畢竟只是代表著點擊的過渡狀態,當你手動設定setHighlight:為YES時,他其實會再一次呼叫setHighlight:並設定其為NO,所以你還是得把點選的固著狀態實作在setSelected:裡面。
留言
張貼留言