有時候我們希望讓 uibutton 的點選範圍比視覺上還要大
此時可以對 uibutton 建立乙個 category
新增一些 method 來設定點選範圍
最理想狀況是可以分別控制上下左右的延長範圍
@inte***ce uibutton(enlargetoucharea)
@end
@implementation uibutton(enlargetoucharea)
static char topnamekey;
static char rightnamekey;
static char bottomnamekey;
static char leftnamekey;
- (void) setenlargeedgewithtop:(cgfloat) top right:(cgfloat) right bottom:(cgfloat) bottom left:(cgfloat) left
- (cgrect) enlargedrect
else
}- (uiview*) hittest:(cgpoint) point withevent:(uievent*) event
return cgrectcontainspoint(rect, point) ? self : nil;
}@end
利用 objective-c 中的 objc_setassociatedobject 來記錄要變大的範圍。
objc_setassociatedobject 是 objective-c runtime library 裡面的 function。
要使用需要import:
#import
最後,最重要的是去 override- (uiview) hittest:(cgpoint) point withevent:(uievent) event
用新設定的 rect 來當做點選範圍。
在建立 button 時,就可以直接設定 button 的點選範圍
uibutton* enlargebutton1 = [uibutton buttonwithtype:uibuttontyperoundedrect];
[enlargebutton1 settitle:@"enlarge button" forstate:uicontrolstatenormal];
[enlargebutton1 setframe:cgrectmake(90, 150, 100, 50)];
[enlargebutton1 addtarget:self action:@selector(onbuttontap:) forcontrolevents:uicontroleventtouchupinside];
[enlargebutton1 sizetofit];
[self.view addsubview:enlargebutton1];
// 增加 button 的點選範圍
[enlargebutton1 setenlargeedgewithtop:20 right:20 bottom:20
left:0];
iOS 增加UIButton按鈕的可點選區域
在很多時候,按鈕可能看起來那麼大,但是在它周圍進行點選時,都能夠觸發事件,是因為它的可點選區域比我們看到的button要大。在使用autolayout的時候,我們處理的是按鈕的image屬性,所以這個時候要將它的backgroundimage設定為nil,否則,會有兩張不一樣大小的image。cgr...
UIButton 的點選事件詳解
uicontroleventtouchdown 單點觸控按下事件 使用者點觸螢幕,或者又有新手指落下的時候。uicontroleventtouchdownrepeat 多點觸控按下事件,點觸計數大於1 使用者按下第 二 三 或第四根手指的時候。uicontroleventtouchdraginsid...
iOS 為UIButton擴大點選響應區域
我們可以為uibutton建立乙個category,然後利用runtime的繫結屬性,來擴大響應區域。先看一下.h檔案裡的,只宣告了乙個函式。使用的時候直接利用這個函式擴大四周的響應區域。import inte ce uibutton enlargetouchaera void setenlarge...