I want to be able to create a UIButton with an oversized responsive area. I know that one way to do that is to override the hitTest method in a subclass, but how do I insta
The buttonType
property is not used anywhere in UIKit, and in your code you could always check -isKindOfClass:
, so overwriting +buttonWithType:
for this property is rather pointless IMO. Just use
return [[[OversizedButton alloc] initWithFrame:...] autorelease];
(You can override the button type with the undocumented method _setButtonType:
.)
Here's how I do it:
+ (instancetype)customButtonWithCustomArgument:(id)customValue {
XYZCustomButtom *customButton = [super buttonWithType:UIButtonTypeSystem];
customButton.customProperty = customValue;
[customButton customFunctionality];
return customButton;
}
Works also with other types, UIButtonTypeSystem
is just an example.
UIButton buttonWithType:
returns a UIButton
or a UIRoundedRectButton
, depending on the value of the type
parameter.
As UIButton
doesn't provide an initWithType:
method, I believe it would be dangerous to try and override buttonWithType:
.
I suggest you subclass UIControl
instead. You can then add a button as a subview to your control, and intercept hitTest:withEvent:
.