Necesitaba hacer lo mismo y terminé volcando el método UINavigationBar touchesBegan: withEvent y comprobando la coordenada y del toque antes de llamar al método original.
Esto significa que cuando el toque estaba demasiado cerca de un botón que estaba usando debajo de la Navegación, podría cancelarlo.
Ex: El botón de retroceso casi siempre capturado el evento táctil en lugar de la "Primera" Botón
Aquí está mi categoría:
@implementation UINavigationBar (UINavigationBarCategory)
- (void)sTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
float maxY = 0;
for (UITouch *touch in touches) {
float touchY = [touch locationInView:self].y;
if ([touch locationInView:self].y > maxY) maxY = touchY;
}
NSLog(@"swizzlelichious bar touchY %f", maxY);
if (maxY < 35)
[self sTouchesEnded:touches withEvent:event];
else
[self touchesCancelled:touches withEvent:event];
}
- (void)sTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
float maxY = 0;
for (UITouch *touch in touches) {
float touchY = [touch locationInView:self].y;
if ([touch locationInView:self].y > maxY) maxY = touchY;
}
NSLog(@"swizzlelichious bar touchY %f", maxY);
if (maxY < 35)
[self sTouchesBegan:touches withEvent:event];
else
[self touchesCancelled:touches withEvent:event];
}
La aplicación swizzle por Mike cenizas de CocoaDev
void Swizzle(Class c, SEL orig, SEL new)
{
Method origMethod = class_getInstanceMethod(c, orig);
Method newMethod = class_getInstanceMethod(c, new);
if(class_addMethod(c, orig, method_getImplementation(newMethod), method_getTypeEncoding(newMethod)))
class_replaceMethod(c, new, method_getImplementation(origMethod), method_getTypeEncoding(origMethod));
else
method_exchangeImplementations(origMethod, newMethod);
}
Y la función llama a la función swizzle
Swizzle([UINavigationBar class], @selector(touchesEnded:withEvent:), @selector(sTouchesEnded:withEvent:));
Swizzle([UINavigationBar class], @selector(touchesBegan:withEvent:), @selector(sTouchesBegan:withEvent:));
No sé si Apple está de acuerdo con esto, podría estar infringiendo sus directrices de UI, intentaré actualizar la publicación si después de enviar la aplicación a la tienda de aplicaciones.
tengo el mismo problema ahora, ¿encontró una solución? –
, no, lo siento ... Encontré ese error en muchas aplicaciones ...: o –