呃...

其實不會有什麼精深的東西,也就只是把我學習過程記錄一下...

2014年9月8日 星期一

[問題] 請教如何改變UIButton的highlighted狀態? (My answer for question in MacDev)

引用:http://www.ptt.cc/bbs/MacDev/M.1407647206.A.BD3.html
原文章問題簡述:如何手指不離開螢幕觸發多個Object
在ptt上回應了一篇個人認為算是有通盤回應到答案的文章,如下。(回覆部分黑底反白)


 作者  flamelad (flamelad)                                       看板  MacDev
 標題  Re: [問題] 請教如何改變UIButton的highlighted狀態?
 時間  Sun Aug 10 13:06:43 2014
───────────────────────────────────────

    關於你的問題昨天原本想回信,但因為太晚又考慮到我並不是非常熟悉,所以就沒回
應了。由於你來信詢問,那我會盡我綿薄之力提供建議,不對之處還請多見諒。另外這篇
我就直接回應到版上占用一些版面,讓版友可以指出我不對之處或提供更佳解 :)

※ 引述《pistols (我不想上報 別寄信啦)》之銘言:
: 請問一下版友
: 我想設置多個UIButton
: 譬如我從xcode右下角拉了九個UIButton放到ViewControl
: 排列就像電話的按鈕 1 2 3...9這樣九宮格的排列
: 我想設計每個按鈕的state狀態為highlighted時  會產生個別的反應或音效
: 可是忽然發現UIButton的highlighted的特性跟我想的不太一樣
: 譬如當我按住button1時候  就會有highlighted
: 但是我手指拖移離開button1 移到button2的範圍內時
: button1的highlighted仍然未消失   button2也沒有出現highlighted

    就如上次你詢問時的解答,假如你只是想要click button 後可以得到被點擊後或點住
不放的狀態,那isHighLighted 就可以得到你想要的結果,否則應該使用其他的-(method)
或判斷。(請務必參考isHighLighted 的description)
    另外就我所了解的是,當你手指未離開屏幕而移動,整體來說只會是某個 Object 的
a series of events,包括Inside, Outside, DragExit等,而不是手指從button1 拖曳到
button2 就會trigger button2 的event。

: 想請問版友
: 我如果想讓每一個button只要是手指有接觸到該按鈕的範圍內就會有highlighted反應
: 而一離開或是拖移超出範圍馬上就不會有highlighted
: 我該如何設置呢?

    這並不難,請參考UIButton繼承的UIControl中的一些method,主要是需要改變按下
button的default UIControlEvent。

: 譬如像上面說的例子
: 當我手指離開button1範圍 移到button2範圍的時候
: 如何讓button1的highlighted馬上消失  而變成button2的highlighted跑出來

    這例子若是手指並不離開屏幕,則與上一段你所希望的並不相同,請見第一段的解釋
。若你想有手指不離開屏幕而觸發多個 Objects,應該使用Gesture Recognizer或是版友
所提到的UITouch中的-(method)。

: 是要拉每個按鈕的IBOutlet到interface底下 增加什麼判定的屬性嗎?
: 我是有試過拉IBAction 然後用touch drag outside或是drag inside等等
: 但都不會跑出我所說的那樣
: 而且  我的功能是用按鈕的state去做反應的
: 希望版友可幫忙解答一下
: 非常感謝!

    請參考UIControl。另外若有拉IBAction,每當你觸發了版面上的某個Object event時
,則IBAction中常見的sender就是被觸發Object的instance,你可以借由這個sender去改
變行為。

  以上,大致上是我的理解,希望有幫助:)

Edit:
    最後一段有些謬誤的地方,不好意思,趕吃飯:p
    謬誤:
        1. 在button中的sender並不該是改變event,而是增減一些event才對。
        2. 若是要修改該button的event,一般也不會在該button中實現,而是如你
           所說,另外declare一個IBOutlet,然後去增加該button的event

沒有留言:

張貼留言