2012-01-03 9 views
6

Non conosco alcun Objective-C, è per questo che sto usando PhoneGap per creare un'app iOS. C'è un grande difetto in PhoneGap per iOS. La tastiera ha costantemente il form assistant (i pulsanti 'next', 'previous' e 'done'.) Ci sono pochissime informazioni sul web su come sbarazzarsi di questo, tutte le domande Stackoverflow a riguardo dicono che era praticamente impossibile. Ma dopo un po 'sono incappato in questo tutorial. Il paragrafo in basso ti dice come farlo. E funziona, ho scaricato e testato l'app finale.Come installare questo script in PhoneGap per iOS

Ma poiché non ho idea di come fare quasi nulla in Xcode, o in Objective-C, non ho idea di quali file entrino nelle due sezioni di codice, non dice nel tutorial.

Qualcuno può dirmi dove si trova nei file delle app PhoneGap? Lo apprezzerei moltissimo, questo mi ha tormentato tutto il giorno.

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

E questo

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

Anche questa

- (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]; 
       } 
      } 
     } 
    } 
} 

Grazie!

+2

Parola di consulenza. Impara obj-c e sarai molto più felice. –

risposta

16

Mi sono imbattuto nel bisogno di farlo da solo. Sono uno sviluppatore IOS, ma avevo bisogno di usare phonegap per mantenere bassi i costi per lo sviluppo multipiattaforma.

In ogni caso, ho corretto il codice. Come, credo, non volete trascorrere il vostro tempo ad imparare obj-c, è sufficiente sostituire il contenuto di tuo MainViewController.m con il seguente:

#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 

Come una parola di avvertimento, questo è un po ' di una soluzione hacky (ma poi lo sta usando phonegap!), e potrebbe rompersi nelle versioni future di iOS. Ma penso che lo risolviamo quando si tratta di farlo ...

+0

Grazie mille! –

+0

Amico, grazie MOLTO! Sono sorpreso che la tua risposta non sia venuta fuori dai miei precedenti googlings. Questa risposta merita sicuramente molti più voti. – hasen

+0

Dopo aver provato questo mi sono imbattuto in un piccolo problema. Sebbene rimuova la barra nera dal display, la barra è in qualche modo "ancora lì", influisce sul modo in cui la webview scorre. Significato, se un campo di input è "dietro" quella barra, quindi il sistema costringerà la vista a scorrere verso l'alto – hasen

0

Ci sono un numero di plugin PhoneGap per migliorare il controllo della tastiera. Sebbene non l'abbia ancora usato, sembra che lo Ionic Keyboard Plugin possa fornire quello che stai cercando di fare.

"Nasconde la barra degli accessori della tastiera con i pulsanti successivo, precedente e completo." Metodo: cordova.plugins.Keyboard.hideKeyboardAccessoryBar

Per inserirlo: Cordova plug aggiungere https://github.com/driftyco/ionic-plugins-keyboard.git