增加 UIButton 的點選範圍

2021-06-21 09:09:30 字數 1619 閱讀 9192

有時候我們希望讓 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...