प्रस्तुत उत्तरों में कुछ भी गलत नहीं है; हालाँकि मैं jlarjlar के उत्तर का विस्तार करना चाहता था क्योंकि यह अद्भुत क्षमता रखता है जो अन्य नियंत्रणों (जैसे सर्चबेल) के साथ एक ही समस्या के लिए मूल्य जोड़ सकता है। इसका कारण यह है कि चूंकि पॉइंटइनसाइड एक UIView से जुड़ा हुआ है, इसलिए कोई भी स्पर्श क्षेत्र को बेहतर बनाने के लिए किसी भी नियंत्रण को उप-वर्ग में सक्षम कर सकता है । यह उत्तर पूर्ण समाधान को लागू करने के तरीके का एक पूर्ण नमूना भी दिखाता है।
अपने बटन (या किसी भी नियंत्रण) के लिए एक नया उपवर्ग बनाएँ
#import <UIKit/UIKit.h>
@interface MNGButton : UIButton
@end
अगला आपके उपवर्ग कार्यान्वयन में पॉइंटइनसाइड विधि को ओवरराइड करता है
@implementation MNGButton
-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
//increase touch area for control in all directions by 20
CGFloat margin = 20.0;
CGRect area = CGRectInset(self.bounds, -margin, -margin);
return CGRectContainsPoint(area, point);
}
@end
अपने स्टोरीबोर्ड / xib फ़ाइल पर प्रश्न में नियंत्रण का चयन करें और पहचान निरीक्षक खोलें और अपने कस्टम वर्ग के नाम पर टाइप करें।
बटन वाले दृश्य के लिए आपके UIViewController वर्ग में, बटन के वर्ग प्रकार को अपने उपवर्ग के नाम में बदलें।
@property (weak, nonatomic) IBOutlet MNGButton *helpButton;
अपने स्टोरीबोर्ड / xib बटन को संपत्ति IBOutlet से लिंक करें और उप-क्षेत्र में परिभाषित क्षेत्र को फिट करने के लिए आपके स्पर्श क्षेत्र का विस्तार किया जाएगा।
CGRectInset और CGRectContainsPoint विधियों के साथ पॉइंटइनसाइड विधि को ओवरराइड करने के अलावा , किसी भी UIView उप-वर्ग के आयताकार स्पर्श क्षेत्र को विस्तारित करने के लिए CGGeometry की जांच करने के लिए समय निकालना चाहिए । तुम भी पर CGGeometry उपयोग-मामले पर कुछ अच्छा सुझाव के मिल सकता है NSHipster ।
उदाहरण के लिए, ऊपर बताए गए तरीकों का उपयोग करके कोई भी स्पर्श क्षेत्र को अनियमित बना सकता है या केवल क्षैतिज स्पर्श पथ के रूप में चौड़ाई स्पर्श क्षेत्र को दो बार बड़ा करने के लिए चुन सकता है:
CGRect area = CGRectInset(self.bounds, -(2*margin), -margin);
एनबी: किसी भी यूआई वर्ग नियंत्रण को अलग-अलग नियंत्रणों (या किसी भी यूआईवाईयूवी उपक्लास, जैसे कि यूआईआईएमजेड्यूवी, आदि) के लिए स्पर्श क्षेत्र का विस्तार करने पर समान परिणाम उत्पन्न करना चाहिए।