UİButton: vuruş alanını varsayılan isabet alanından daha büyük Yapma
Bir soru UİButton ve hit alanı ile ilgili var. Interface builder İnfo Karanlık düğmesini kullanıyorum, ama isabet alan bazı insanların parmakları için yeterince büyük değil, çok zorlanıyorum.
Bir şekilde İnfoButton grafik boyutunu değiştirmeden bir düğmeye programlı veya Interface Builder ya da vuruş alanını artırmak için var mı?
CEVAP
Bir arka plan görüntüsü kullanıyorum beri, bu çözümlerin hiçbiri benim için çalıştı. İşte bazı eğlenceli objective-c büyü yapar ve en az bir kod ile çözüm bir damla sunan bir çözüm.
İlk vuruş testi geçersiz kılar ve aynı zamanda isabet sınama çerçevesi genişleyen bir özellik ekler UIButton
için bir kategori ekleyin.
UİButton Uzantıları.h
@interface UIButton (Extensions)
@property(nonatomic, assign) UIEdgeInsets hitTestEdgeInsets;
@end
UİButton Uzantıları.m
#import "UIButton Extensions.h"
#import <objc/runtime.h>
@implementation UIButton (Extensions)
@dynamic hitTestEdgeInsets;
static const NSString *KEY_HIT_TEST_EDGE_INSETS = @"HitTestEdgeInsets";
-(void)setHitTestEdgeInsets:(UIEdgeInsets)hitTestEdgeInsets {
NSValue *value = [NSValue value:&hitTestEdgeInsets withObjCType:@encode(UIEdgeInsets)];
objc_setAssociatedObject(self, &KEY_HIT_TEST_EDGE_INSETS, value, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
-(UIEdgeInsets)hitTestEdgeInsets {
NSValue *value = objc_getAssociatedObject(self, &KEY_HIT_TEST_EDGE_INSETS);
if(value) {
UIEdgeInsets edgeInsets; [value getValue:&edgeInsets]; return edgeInsets;
}else {
return UIEdgeInsetsZero;
}
}
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
if(UIEdgeInsetsEqualToEdgeInsets(self.hitTestEdgeInsets, UIEdgeInsetsZero) || !self.enabled || self.hidden) {
return [super pointInside:point withEvent:event];
}
CGRect relativeFrame = self.bounds;
CGRect hitFrame = UIEdgeInsetsInsetRect(relativeFrame, self.hitTestEdgeInsets);
return CGRectContainsPoint(hitFrame, point);
}
@end
Bu sınıf eklendikten sonra, tüm yapmanız gereken kenarına düğme parçalar ayarlanır. Eğer vuruş alanını daha büyük yapmak istiyorsanız, negatif sayılar kullanmanız gerekir böylece parçalar eklemek için seçtim unutmayın.
[button setHitTestEdgeInsets:UIEdgeInsetsMake(-10, -10, -10, -10)];
Not: kategorisi (#import "UIButton Extensions.h"
) sınıflar da almayı Unutmayın.
Düzeltme yazı tipi metin tutarsız bir ...
Nasıl tüm tarihler SQL Server belirli ...
Nasıl div içeriğini daha büyük değil y...
Kullanarak daha büyük bir dize Düzenli...
Bugün boy Uzatma için iPad belirtilend...