Desidero essere in grado di creare un UIButton con un'area reattiva sovradimensionata. So che un modo per farlo è sovrascrivere il metodo hitTest in una sottoclasse, ma come faccio a creare un'istanza del mio oggetto pulsante personalizzato in primo luogo?iPhone: Sovrascrivi pulsante UIButtonWithType per restituire sottoclasse
[OversizedButton buttonWithType: UIButtonTypeDetailDisclosure];
non funziona out of the box, perché buttonWithType restituisce un UIButton, non un OversizedButton.
Quindi sembra che sia necessario sovrascrivere anche il metodo buttonWithType. Qualcuno sa come fare questo?
@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
In alternativa, potrei creare il pulsante utilizzando alloc/initWithFrame. Ma la proprietà buttonType è di sola lettura, quindi come si creano i tipi di pulsanti personalizzati?
Nota: so che ci sono altri modi per farlo, come avere un pulsante invisibile dietro quello visibile. Non mi interessa per questo approccio e preferirei evitarlo. Qualsiasi aiuto sull'approccio sopra descritto sarebbe molto utile. Grazie
Stai seriamente suggerendo di utilizzare un metodo non documentato in un'applicazione commerciale che richiederebbe l'approvazione di Apple? – Amagrammer
@Ama: ti suggerisco di non preoccuparti della proprietà 'buttonType'. Ma se è necessario, l'unico modo per cambiarlo è tramite metodi non documentati. – kennytm
Bene, ho bisogno di visualizzare i pulsanti UIButtonTypeDetailDisclosure, quindi "non disturbare" non funzionerà. Devo presumere che a tua conoscenza non c'è modo di sovrascrivere il metodo buttonWithType? Grazie – Amagrammer