Quiero ser capaz de crear un UIButton con un área de respuesta de gran tamaño. Sé que una forma de hacerlo es anular el método hitTest en una subclase, pero, ¿cómo puedo instanciar mi objeto de botón personalizado en primer lugar?iPhone: anula el botón UIButtonWithType para devolver la subclase
[OversizedButton buttonWithType: UIButtonTypeDetailDisclosure];
no funciona fuera de la caja, porque buttonWithType devuelve un UIButton, no un OversizedButton.
Parece que también debo reemplazar el método buttonWithType. ¿Alguien sabe como hacer esto?
@implementation OversizedButton
+ (id)buttonWithType:(UIButtonType)buttonType
{
// Construct and return an OversizedButton rather than a UIButton
// Needs to handle special types such as UIButtonTypeDetailDisclosure
// I NEED TO KNOW HOW TO DO THIS PART
}
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
// Return results if touch event was in oversized region
// I ALREADY KNOW HOW TO DO THIS PART
}
@end
Alternativamente, tal vez podría crear el botón utilizando alloc/initWithFrame. Pero la propiedad buttonType es de solo lectura, entonces, ¿cómo se crean los tipos de botones personalizados?
Nota: Sé que hay otras formas de hacerlo, como tener un botón invisible detrás del visible. No me importa ese enfoque y preferiría evitarlo. Cualquier ayuda sobre el enfoque descrito anteriormente sería muy útil. Gracias
¿Está sugiriendo seriamente que use un método no documentado en una aplicación comercial que requeriría la aprobación de Apple? – Amagrammer
@Ama: sugiero que no te molestes con la propiedad 'buttonType'. Pero si debe hacerlo, la única forma de cambiarlo es a través de métodos no documentados. – kennytm
Bueno, necesito mostrar los botones UIButtonTypeDetailDisclosure, por lo que "no molestar" no funcionará. ¿Debo suponer que, según su conocimiento, no hay forma de anular el método buttonWithType? Gracias – Amagrammer