2012-11-06 10 views
10

là nó có thể làm tăng diện tích tapable của UIButton mà không thay đổi kích thước của hình ảnh nền ButtonLàm thế nào để tăng diện tích tapable (đánh) của (Type tùy chỉnh) UIButton mà không cần kích thước ngày càng tăng của hình nền

tôi đã cố gắng:

[shareButton setContentEdgeInsets:UIEdgeInsetsMake(top, left, bottom, right)]; 

&

[shareButton setImageEdgeInsets:UIEdgeInsetsMake(top, left, bottom, right)]; 

nhưng không ai trong số những tác dụng.

Bất kỳ đề xuất nào vui lòng?

Trả lời

14

Tận dụng tối UIButton kiểu buttonWithType:UIButtonTypeCustom và gán cho nó một hình ảnh có kích thước nhỏ hơn.

Không đặt hình ảnh làm hình nền hoặc hình ảnh sẽ phát triển bằng nút. Đặt nó làm hình ảnh chính thay thế.

Ví dụ: nếu bạn muốn đặt khu vực có thể mở rộng thành kích thước 64x64 và bạn muốn hiển thị hình ảnh có kích thước 32x32: kích thước nút phải là 64x64 và kích thước hình ảnh phải là 32x32.

lập trình:

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 

// use an image with the desired size (for example 32x32) 
[button setImage: [UIImage imageNamed: @"buttonIcon.png"] forState: UIControlStateNormal]; 
// just set the frame of the button (64x64) 
[button setFrame: CGRectMake(xPositionOfMyButton, yPositionOfMyButton, 64, 64)]; 

Interface Builder:

Interface Builder example

3

Subclass superview của UIButton, và ghi đè hitTest: withEvent:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    CGPoint buttonPoint = [self convertPoint:point toView:_button]; 
    if ([_button pointInside:buttonPoint withEvent:event]) { // you may add your requirement here 
     return _button; 
    } 
    return [super hitTest:point withEvent:event]; 
} 
+0

là không có bất kỳ cách nào khác hơn là phụ classing các UIButton? bất kỳ phương pháp hoặc thuộc tính nào của nút để đặt vùng đánh bằng tay? –

+3

@crishoj Tệ hơn nhiều! – devios1

+0

@crishoj nó không đúng, bạn có thể phân lớp nút và ghi đè pointInside. – Andy

3

Sử dụng các phương pháp thiết kế mà bạn thích (Interface Builder/Visual Format Language) cùng với Autolayout và bố trí các UIButton với kích thước yêu cầu . Đặt tiêu đề hoặc hình ảnh làm nội dung và sử dụng hình ảnh trong suốt có kích thước của khu vực có thể nhấn làm hình nền.

_button = [UIButton buttonWithType:UIButtonTypeCustom]; 
[_button setImage:[UIImage imageNamed:@"contentImage"] forState:UIControlStateNormal]; 
[_button setBackgroundImage:[UIImage imageNamed:@"transparentImage"] forState:UIControlStateNormal]; 

Dưới đây là một ví dụ với _button.layer.borderWidth = 1.

Example http://i59.tinypic.com/wwnt5u.png