2012-01-03 14 views
6

No conozco ningún Objective-C, es por eso que estoy usando PhoneGap para crear una aplicación de iOS. Hay un gran defecto en PhoneGap para iOS. El teclado tiene constantemente el asistente de forma (los botones 'siguiente', 'anterior' y 'listo'). Hay muy poca información en la web sobre cómo deshacerse de esto, todas las preguntas sobre Stackoverflow dicen que fue prácticamente imposible. Pero después de un tiempo tropecé con este tutorial. El párrafo inferior te dice cómo hacerlo. Y funciona, descargué y probé la aplicación terminada.Cómo instalo este script en PhoneGap para iOS

Pero como no tengo ni idea de cómo hacer casi cualquier cosa en Xcode, o en Objective-C, no tengo idea de qué archivos entran las dos secciones de código, él no dice en el tutorial.

¿Alguien puede decirme en qué parte de los archivos de las aplicaciones PhoneGap va? Apreciaría enormemente, esto me ha estado molestando todo el día.

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; 

Y esto

RichTextEditorViewController *viewController = [[RichTextEditorViewController alloc] initWithNibName:@"RichTextEditorViewController" bundle:nil]; 
self.viewController = [[UINavigationController alloc] initWithRootViewController:viewController]; 

También este

- (void)removeBar { 
    // Locate non-UIWindow. 
    UIWindow *keyboardWindow = nil; 
    for (UIWindow *testWindow in [[UIApplication sharedApplication] windows]) { 
     if (![[testWindow class] isEqual:[UIWindow class]]) { 
      keyboardWindow = testWindow; 
      break; 
     } 
    } 

    // Locate UIWebFormView. 
    for (UIView *possibleFormView in [keyboardWindow subviews]) {  
     // iOS 5 sticks the UIWebFormView inside a UIPeripheralHostView. 
     if ([[possibleFormView description] rangeOfString:@"UIPeripheralHostView"].location != NSNotFound) { 
      for (UIView *subviewWhichIsPossibleFormView in [possibleFormView subviews]) { 
       if ([[subviewWhichIsPossibleFormView description] rangeOfString:@"UIWebFormAccessory"].location != NSNotFound) { 
        [subviewWhichIsPossibleFormView removeFromSuperview]; 
       } 
      } 
     } 
    } 
} 

Gracias!

+2

Un consejo. Aprende obj-c y serás mucho más feliz. –

Respuesta

16

Me he encontrado con la necesidad de hacerlo yo mismo. Soy desarrollador de IOS, pero necesitaba usar Phonegap para mantener bajos los costos de desarrollo multiplataforma.

De todos modos, he reparado tu código. Como, supongo, usted no quiere gastar su tiempo de aprendizaje obj-c, sólo tiene que reemplazar el contenido de su MainViewController.m con lo siguiente:

#import "MainViewController.h" 

@implementation MainViewController 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; 
    } 
    return self; 
} 

- (void)didReceiveMemoryWarning 
{ 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

    // Release any cached data, images, etc that aren't in use. 
} 

#pragma mark - View lifecycle 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
} 

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    // Return YES for supported orientations 
    return [super shouldAutorotateToInterfaceOrientation:interfaceOrientation]; 
} 

- (void) removeBar { 
    // Locate non-UIWindow. 
    UIWindow *keyboardWindow = nil; 
    for (UIWindow *testWindow in [[UIApplication sharedApplication] windows]) { 
     if (![[testWindow class] isEqual:[UIWindow class]]) { 
      keyboardWindow = testWindow; 
      break; 
     } 
    } 

    // Locate UIWebFormView. 
    for (UIView *possibleFormView in [keyboardWindow subviews]) {  
     // iOS 5 sticks the UIWebFormView inside a UIPeripheralHostView. 
     if ([[possibleFormView description] rangeOfString:@"UIPeripheralHostView"].location != NSNotFound) { 
      for (UIView *subviewWhichIsPossibleFormView in [possibleFormView subviews]) { 
       if ([[subviewWhichIsPossibleFormView description] rangeOfString:@"UIWebFormAccessory"].location != NSNotFound) { 
        [subviewWhichIsPossibleFormView removeFromSuperview]; 
       } 
      } 
     } 
    } 
} 

- (void)keyboardWillShow:(NSNotification*) notification { 
    // remove the bar in the next runloop (not actually created at this point) 
    [self performSelector:@selector(removeBar) withObject:nil afterDelay:0]; 
} 

@end 

Como una palabra de advertencia, esto es un poco de una solución hacky (¡pero entonces también está usando phonegap!), y puede romperse en versiones futuras de iOS. Pero supongo que lo solucionamos cuando se trata de ...

+0

¡Muchas gracias! –

+0

Amigo, gracias MUCHO! Me sorprende que tu respuesta no haya aparecido en mis búsquedas anteriores en Google. Esta respuesta definitivamente merece mucho más votos positivos. – hasen

+0

Después de probar esto me encontré con un pequeño problema. Aunque esto elimina la barra negra de la pantalla, la barra está "todavía allí", afecta cómo se desplaza la vista web. Es decir, si algún campo de entrada está "detrás" de esa barra, entonces el sistema forzará la vista para desplazarse hacia arriba – hasen

0

Hay un número de complementos de PhoneGap para mejorar el control del teclado. Aunque todavía no lo he usado, parece que el complemento de teclado iónico puede proporcionar lo que estás tratando de hacer.

"Oculte la barra de accesorios del teclado con los botones siguiente, anterior y listo". Método: cordova.plugins.Keyboard.hideKeyboardAccessoryBar

para agregarlo: Cordova plugin de añadir https://github.com/driftyco/ionic-plugins-keyboard.git