Ho un'applicazione con una vista che ha campi di testo dalla parte superiore della vista alla parte inferiore della vista. Ne avevo bisogno per scorrere quando si modificano i campi inferiori in modo che i campi siano visibili, ma sembra che non funzioni correttamente.Tastiera Scorri sul campo di testo attivo - Scorrendo fino a non visualizzare?
Dopo la Apple docs, ho messo tutto questo codice nel mio programma (Liste 4-1, 4-2), e ha aggiunto le prese scrollView
e activeField
al mio file di intestazione e li collegato a IB.
Il problema è che non faccio clic su un campo di testo, TUTTI i campi di testo non vengono visualizzati finché non ignoro la tastiera. Scorrono molto lontano (di nuovo, abbastanza lontano da dove nessuno dei campi è visibile).
Qualcuno sa da cosa potrebbe essere causato questo problema?
Sto inserendo il codice qui da Apple Docs in modo da poter vedere esattamente quale codice sto usando senza dover fare clic di distanza.
//my .h
IBOutlet UIScrollView *scrollView;
IBOutlet UITextField *activeField;
//.m
// Call this method somewhere in your view controller setup code.
- (void)registerForKeyboardNotifications
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWasShown:)
name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillBeHidden:)
name:UIKeyboardWillHideNotification object:nil];
}
// Called when the UIKeyboardDidShowNotification is sent.
- (void)keyboardWasShown:(NSNotification*)aNotification
{
NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);
scrollView.contentInset = contentInsets;
scrollView.scrollIndicatorInsets = contentInsets;
// If active text field is hidden by keyboard, scroll it so it's visible
// Your application might not need or want this behavior.
CGRect aRect = self.view.frame;
aRect.size.height -= kbSize.height;
if (!CGRectContainsPoint(aRect, activeField.frame.origin)) {
CGPoint scrollPoint = CGPointMake(0.0, activeField.frame.origin.y-kbSize.height);
[scrollView setContentOffset:scrollPoint animated:YES];
}
}
// Called when the UIKeyboardWillHideNotification is sent
- (void)keyboardWillBeHidden:(NSNotification*)aNotification
{
UIEdgeInsets contentInsets = UIEdgeInsetsZero;
scrollView.contentInset = contentInsets;
scrollView.scrollIndicatorInsets = contentInsets;
}
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
activeField = textField;
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
activeField = nil;
}
ho modificato il copia-incolla del codice di Apple dal tuo post, perché è dubbio che ha così permesso da Apple per riprodurlo. Ho anche segnalato un moderatore per dare un'occhiata - non sono sicuro di quale sia o dovrebbe essere la politica ufficiale. –
@Josh: Questa piccola quantità di codice è probabilmente OK, per ["Fair Use,"] (http://en.wikipedia.org/wiki/Fair_use). –
@Robert: Ok, grazie. James, immagino che questo significhi che dovresti rimetterlo in posto se lo scegli tu. Scusa per il disturbo. –