Min*_*arg 28 objective-c uibutton ios
我已经以UIButton编程方式完成了
togglebutton = [UIButton buttonWithType:UIButtonTypeCustom];
togglebutton.frame = CGRectMake(42, 15, 80, 21);
[togglebutton addTarget:self action:@selector(toggleview)
forControlEvents:UIControlEventTouchUpInside];
[togglebutton setImage:[UIImage imageNamed:@"squ.png"] forState:UIControlStateNormal];
[buttonView addSubview:togglebutton];
Run Code Online (Sandbox Code Playgroud)

它在上图中看起来是右键.现在的要求是该按钮的选择区域应该大于uibutton图像.这样用户就可以通过触摸特定按钮的区域来轻松点击按钮.
[togglebutton setImageEdgeInsets: UIEdgeInsetsMake( 0, -30, 0, -25)];
Run Code Online (Sandbox Code Playgroud)
我试图设置它image inset但它正在制作image irregular.请看这个问题.
Nit*_*hel 46
您可以通过设置按钮来实现此目的contentEdgeInsets,例如:
toggleButton.contentEdgeInsets = UIEdgeInsetsMake(0, 15, 0, 0); //set as you require
Run Code Online (Sandbox Code Playgroud)
Mar*_*ark 17
对于斯威夫特
您可以覆盖UIView类的func'pointInside'以扩展可点击区域.
override func pointInside(point: CGPoint, withEvent event: UIEvent?) -> Bool {
// padding : local variable of your custom UIView, CGFloat
// you can change clickable area dynamically by setting this value.
let newBound = CGRect(
x: self.bounds.origin.x - padding,
y: self.bounds.origin.y - padding,
width: self.bounds.width + 2 * padding,
height: self.bounds.height + 2 * padding
)
return CGRectContainsPoint(newBound, point)
}
Run Code Online (Sandbox Code Playgroud)
像这样使用,
class MyButton: UIButton {
var padding = CGFloat(0) // default value
//func pointInside at here!!
}
Run Code Online (Sandbox Code Playgroud)
初始化按钮时,请设置自定义填充.
func initButton() {
let button = MyButton(frame: CGRect(x: 100, y: 100, width: 30, height: 30))
button.padding = 10 // any value you want
view.addSubview(button)
}
Run Code Online (Sandbox Code Playgroud)
然后你的按钮在框架中(x:100,y:100,宽度:30,高度:30)
并且您的按钮的可点击区域可能位于框架中(x:90,y:90,宽度:50,高度:50)
**请务必检查与任何其他视图的重叠,因为其可点击区域大于其外观.
Swift 3的更新
override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
let padding = CGFloat(10)
let extendedBounds = bounds.insetBy(dx: -padding, dy: -padding)
return extendedBounds.contains(point)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25654 次 |
| 最近记录: |