Scrollen Sie in ein bestimmtes Textfeld in einem ScrollView/ScrollView -STOP -SCROLL, wenn sich die Tastatur auf dem Bildschirm befindet
-
22-09-2019 - |
Frage
Ich bin hier stecken geblieben,
Ich habe eine benutzerdefinierte ScrollView in einer Ansicht. Diese Scroll -Ansicht verfügt über eine Schaltfläche "Hinzufügen", mit dem Benutzer dem ScrollView neues Textfeld hinzufügen können. Wenn der Benutzer auf eine bestimmte Textfeld -Tastatur angezeigt wird und das Textfeld ausgeblendet wird, verfolgt ich, um dies zu überwinden
Um dies zu verhindern, folgte ich ein Uicatalog -Beispiel und tat dies
-(void)textFieldDidBeginEditing:(UITextField *)sender
{
if (sender.frame.origin.y>109) {
moveScrollViewUpBy=(sender.frame.origin.y-109+10);
[self viewMovedUp:YES];
}
}
-(void)viewMovedUp:(BOOL)movedUp
{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3];
CGRect rect = formScrollView.frame;
if (movedUp)
{
if(rect.origin.y == 0.0f){
rect.origin.y -= kOFFSET_FOR_KEYBOARD;
rect.size.height += kOFFSET_FOR_KEYBOARD;
}
}
else
{
if(rect.origin.y != 0.0f){
rect.origin.y += kOFFSET_FOR_KEYBOARD;
rect.size.height -= kOFFSET_FOR_KEYBOARD;
}
}
self.formScrollView = rect;
[UIView commitAnimations];
}
hier
#define kOFFSET_FOR_KEYBOARD 160.0
Dies verschiebt jedoch die Bildlaufansicht,
Ich möchte das, wenn ich auf ein Textfeld unten in Scroll -Ansicht tippe ... Scrollenansicht Scrolls und dieses Textfeld erscheint ....
Ist es möglich?
Ich habe noch eine Abfrage srollView. Hören Sie einfach auf zu scrollen, während die Tastatur auf dem Bildschirm bleibt. Gibt es eine Möglichkeit, dies zu überwinden?
Lösung
Sie möchten wahrscheinlich nur die ContentOffset -Eigenschaft des ScrollView festlegen, anstatt ihre Grenzen anzupassen.
Andere Tipps
Implementieren Sie das UitextViewDelegate und machen Sie Folgendes: Folgendes:
- (void)textViewDidBeginEditing:(UITextView *)textView {
keyboardShowing = YES; //helper ivar
[self sizeToOrientation];
[self.scrollView scrollRectToVisible:textView.frame animated:YES];
}
- (void)textFieldDidEndEditing:(UITextField *)textField {
keyboardShowing = NO;
[self sizeToOrientation];
}
Helfermethode:
//fit to the appropriate view sizes
- (void)sizeToOrientation {
CGSize size;
if( keyboardShowing )
size = CGSizeMake(320, 190); //make room for keyboard
else
size = CGSizeMake(320, 420); //full height with tabbar on bottom
self.scrollView.frame = CGRectMake(0, 0, size.width, size.height);
}
Das funktioniert gut für mich.