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:.