Kaip aš galiu padaryti UITextField judėti klaviatūra - kai pradėsiu redaguoti?

Su „iOS SDK“:

Turiu UIView su UITextField kuri yra UITextField klaviatūra. Turiu turėti galimybę:

  1. Leiskite slinkti UIScrollView turinį, kad pamatytumėte kitus teksto laukus, kai tik bus rodoma klaviatūra

  2. Automatiškai „peršokti“ (slenkant aukštyn) arba sumažinkite

Žinau, kad man reikia UIScrollView . Bandžiau pakeisti savo UIView į UIScrollView bet vis dar negaliu slinkti teksto laukų aukštyn ar žemyn.

Ar man reikia UIView ir UIScrollView ? Ar įeina į kitą?

Ką reikia įgyvendinti, kad automatiškai slinktumėte aktyvųjį teksto lauką?

Idealiu atveju maksimalus galimas komponentų pritaikymas bus atliekamas sąsajos programuotojoje. Norėčiau parašyti kodą tik tam, ko man reikia.

Pastaba: „ UIView (arba UIScrollView ), su kuria UITabBar , remiasi skirtuko juosta ( UITabBar ), kuri turėtų veikti kaip įprasta.


Pakeisti: įtraukiu slinkties juostą tik tada, kai pasirodo klaviatūra. Net jei to nereikia, manau, kad ji suteikia geresnę sąsają, nes tada vartotojas gali, pavyzdžiui, slinkti ir keisti teksto laukus.

Jis veikia man, kai pakeisiu UIScrollView rėmo dydį, kai klaviatūra yra aukštyn ir žemyn. Aš tiesiog naudoju:

 -(void)textFieldDidBeginEditing:(UITextField *)textField { //Keyboard becomes visible scrollView.frame = CGRectMake(scrollView.frame.origin.x, scrollView.frame.origin.y, scrollView.frame.size.width, scrollView.frame.size.height - 215 + 50); //resize } -(void)textFieldDidEndEditing:(UITextField *)textField { //keyboard will hide scrollView.frame = CGRectMake(scrollView.frame.origin.x, scrollView.frame.origin.y, scrollView.frame.size.width, scrollView.frame.size.height + 215 - 50); //resize } 

Tačiau jis automatiškai „neperkeliamas“ arba nekreipia dėmesio į žemesnius teksto laukus matomoje srityje, kurią aš tikrai norėčiau.

1605
14 июля '09 в 20:06 2009-07-14 20:06 nustatė philfreo liepos 14 d. , 09:06 , 2009-07-14 20:06
@ 92 atsakymai
  • Jums reikia tik „ ScrollView , jei turinys, kuris dabar yra, netinka „iPhone“ ekrane. (Jei „ ScrollView kaip komponento prižiūrėtoją, tiesiog norėdami „ TextField slinkti aukštyn, kai klaviatūra yra pakelta, tai nereikia.)

  • Jei norite rodyti teksto laukus textfields klaviatūros, standartinis būdas yra perkelti vaizdą aukštyn / žemyn su teksto laukais, kai rodoma klaviatūra.

Štai pavyzdinis kodas:

 #define kOFFSET_FOR_KEYBOARD 80.0 -(void)keyboardWillShow { // Animate the current view out of the way if (self.view.frame.origin.y >= 0) { [self setViewMovedUp:YES]; } else if (self.view.frame.origin.y < 0) { [self setViewMovedUp:NO]; } } -(void)keyboardWillHide { if (self.view.frame.origin.y >= 0) { [self setViewMovedUp:YES]; } else if (self.view.frame.origin.y < 0) { [self setViewMovedUp:NO]; } } -(void)textFieldDidBeginEditing:(UITextField *)sender { if ([sender isEqual:mailTf]) { //move the main view, so that the keyboard does not hide it. if (self.view.frame.origin.y >= 0) { [self setViewMovedUp:YES]; } } } //method to move the view up/down whenever the keyboard is shown/dismissed -(void)setViewMovedUp:(BOOL)movedUp { [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:0.3]; // if you want to slide up the view CGRect rect = self.view.frame; if (movedUp) { // 1. move the view origin up so that the text field that will be hidden come above the keyboard // 2. increase the size of the view so that the area behind the keyboard is covered up. rect.origin.y -= kOFFSET_FOR_KEYBOARD; rect.size.height += kOFFSET_FOR_KEYBOARD; } else { // revert back to the normal state. rect.origin.y += kOFFSET_FOR_KEYBOARD; rect.size.height -= kOFFSET_FOR_KEYBOARD; } self.view.frame = rect; [UIView commitAnimations]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; // register for keyboard notifications [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow) name:UIKeyboardWillShowNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide) name:UIKeyboardWillHideNotification object:nil]; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; // unregister for keyboard notifications while not visible. [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil]; [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil]; } 
996
14 июля '09 в 21:03 2009-07-14 21:03 atsakymą RPDP pateikė liepos 14 d., 09:21 , 2009-07-14 21:03

Aš taip pat turėjau problemų dėl UIScrollView kelių UIScrollView sudėties, iš kurių viena ar kelios jų bus uždarytos klaviatūroje juos redaguojant.

Štai keletas dalykų, kuriuos reikia apsvarstyti, jei jūsų „ UIScrollView “ nesugeba tinkamai slinkti.

1) Įsitikinkite, kad jūsų UIScrollView dydis yra didesnis nei UIScrollView rėmo dydis. Kaip suprasti UIScrollViews yra tai, kad UIScrollView yra panašus į turinio UIScrollView apibrėžtą contentSize. Todėl, kai UIScrollView reikia slinkti bet kur, turinio dydis turi būti didesnis nei UIScrollView . Be to, slinkimas nereikalingas, nes viskas, kas apibrėžta „contentSize“, jau yra matoma. BTW, pagal nutylėjimą CGSizeZero = CGSizeZero .

2) Dabar, kai suprantate, kad „ UIScrollView iš tikrųjų yra „turinio“ >UIScrollView's jūsų UIScrollView's peržiūros >UIScrollView dydžio UIScrollView , kad klaviatūra būtų UIScrollView >UIScrollView rėmo.zydžio dydžio, atėmus klaviatūros aukštį. Tai užtikrina, kad jūsų >

3) Čia yra sugavimas: kai pirmą kartą tai padariau, nusprendžiau, kad turėčiau gauti redaguoto teksto lauko UIScrollView's ir paskambinti UIScrollView's scrollRecToVisible metodu. textFieldDidBeginEditing metodą UITextFieldDelegate textFieldDidBeginEditing skambinant į scrollRecToVisible metodą. Tai tikrai keista šalutinis poveikis, kad slinkimas UITextField su padėtimi. Ilgą laiką negalėjau suprasti, kas tai buvo. Tada aš pakomentavau textFieldDidBeginEditing metodą ir visa tai veikia! (???). Kaip paaiškėjo, manau, kad UIScrollView iš tikrųjų numato netiesiogiai esamą redaguotą UITextField >UITextFieldDelegate metodo įgyvendinimas ir paskesnis kvietimas į scrollRecToVisible buvo nereikalingas ir sukėlė keistą šalutinį poveikį.

border=0

Taigi, čia yra žingsniai, kaip teisingai pereiti UITextField į UIScrollView , kai pasirodo klaviatūra.

 // Implement viewDidLoad to do additional setup after loading the view, typically from a nib. - (void)viewDidLoad { [super viewDidLoad]; // register for keyboard notifications [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:self.view.window]; // register for keyboard notifications [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:self.view.window]; keyboardIsShown = NO; //make contentSize bigger than your scrollSize (you will need to figure out for your own use case) CGSize scrollContentSize = CGSizeMake(320, 345); self.scrollView.contentSize = scrollContentSize; } - (void)keyboardWillHide:(NSNotification *)n { NSDictionary* userInfo = [n userInfo]; // get the size of the keyboard CGSize keyboardSize = [[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size; // resize the scrollview CGRect viewFrame = self.scrollView.frame; // I'm also subtracting a constant kTabBarHeight because my UIScrollView was offset by the UITabBar so really only the portion of the keyboard that is leftover pass the UITabBar is obscuring my UIScrollView. viewFrame.size.height += (keyboardSize.height - kTabBarHeight); [UIView beginAnimations:nil context:NULL]; [UIView setAnimationBeginsFromCurrentState:YES]; [self.scrollView setFrame:viewFrame]; [UIView commitAnimations]; keyboardIsShown = NO; } - (void)keyboardWillShow:(NSNotification *)n { // This is an ivar I'm using to ensure that we do not do the frame size adjustment on the `UIScrollView` if the keyboard is already shown. This can happen if the user, after fixing editing a `UITextField`, scrolls the resized `UIScrollView` to another `UITextField` and attempts to edit the next `UITextField`. If we were to resize the `UIScrollView` again, it would be disastrous. NOTE: The keyboard notification will fire even when the keyboard is already shown. if (keyboardIsShown) { return; } NSDictionary* userInfo = [n userInfo]; // get the size of the keyboard CGSize keyboardSize = [[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size; // resize the noteView CGRect viewFrame = self.scrollView.frame; // I'm also subtracting a constant kTabBarHeight because my UIScrollView was offset by the UITabBar so really only the portion of the keyboard that is leftover pass the UITabBar is obscuring my UIScrollView. viewFrame.size.height -= (keyboardSize.height - kTabBarHeight); [UIView beginAnimations:nil context:NULL]; [UIView setAnimationBeginsFromCurrentState:YES]; [self.scrollView setFrame:viewFrame]; [UIView commitAnimations]; keyboardIsShown = YES; } 
  • Prisijunkite prie klaviatūros pranešimų „ viewDidLoad
  • Išregistruokite klaviatūros nofitikacijas viewDidUnload
  • Įsitikinkite, kad turinio dydis contentSize nustatytas ir didesnis nei jūsų „ UIScrollView
  • UIScrollView su klaviatūra
  • UIScrollView kai klaviatūra yra UIScrollView .
  • Naudokite ivar, kad nustatytumėte, ar klaviatūra rodoma ekrane, nes klaviatūros pranešimai siunčiami kiekvieną kartą, kai skirtukas UITextField turi skirtuką, net jei klaviatūra jau yra, kad būtų išvengta santrumpos UIScrollView kai jis jau yra suspaustas

Pažymėtina, kad UIKeyboardWillShowNotification veiks net tada, kai klaviatūra jau yra ekrane, kai spustelėsite kitą UITextField . Aš tai pasirūpinau naudojant „ UIScrollView , kad būtų išvengta UIScrollView dydžio UIScrollView kai klaviatūra jau yra ekrane. Klaidingas UIScrollView dydžio keitimas, kai klaviatūra jau bus katastrofiška!

Tikiuosi, kad šis kodas išgelbės kai kuriuos iš jūsų nuo galvos skausmo.

438
24 апр. Shiun atsakymas, pateiktas balandžio 24 d 2010-04-24 11:31 '10, 11:31, 2010-04-24 11:31

Iš tiesų geriausia naudoti „Apple“ įgyvendinimą, kaip nurodyta dokumentuose . Tačiau kodai, kuriuos jie pateikia, yra klaidingi. Pakeiskite keyboardWasShown: esančią keyboardWasShown: žemiau komentarų:

 NSDictionary* info = [aNotification userInfo]; CGRect keyPadFrame=[[UIApplication sharedApplication].keyWindow convertRect:[[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue] fromView:self.view]; CGSize kbSize =keyPadFrame.size; CGRect activeRect=[self.view convertRect:activeField.frame fromView:activeField.superview]; CGRect aRect = self.view.bounds; aRect.size.height -= (kbSize.height); CGPoint origin = activeRect.origin; origin.y -= backScrollView.contentOffset.y; if (!CGRectContainsPoint(aRect, origin)) { CGPoint scrollPoint = CGPointMake(0.0,CGRectGetMaxY(activeRect)-(aRect.size.height)); [backScrollView setContentOffset:scrollPoint animated:YES]; } 

Problemos, susijusios su „Apple“ kodu, yra šios: (1) jie visada apskaičiuoja, ar taškas yra peržiūros rėmelyje, bet tai yra „ ScrollView , todėl galbūt jis jau buvo ScrollView , ir į tai reikia atsižvelgti:

 origin.y -= scrollView.contentOffset.y 

(2) Jie perkelia turinįOffset į klaviatūros aukštį, bet mes norime priešingai (norime perkelti contentOffset į aukštį, matomą ekrane, o ne į tai, kas nėra):

 activeField.frame.origin.y-(aRect.size.height) 
264
29 янв. atsakymas duotas DK_ 29 sausio. 2011-01-29 17:56 '11, 17:56, 2011-01-29 17:56

textFieldDidBeginEditting ir textFieldDidEndEditing skambinkite funkcijai [self animateTextField:textField up:YES] taip:

 -(void)textFieldDidBeginEditing:(UITextField *)textField { [self animateTextField:textField up:YES]; } - (void)textFieldDidEndEditing:(UITextField *)textField { [self animateTextField:textField up:NO]; } -(void)animateTextField:(UITextField*)textField up:(BOOL)up { const int movementDistance = -130; // tweak as needed const float movementDuration = 0.3f; // tweak as needed int movement = (up ? movementDistance : -movementDistance); [UIView beginAnimations: @"animateTextField" context: nil]; [UIView setAnimationBeginsFromCurrentState: YES]; [UIView setAnimationDuration: movementDuration]; self.view.frame = CGRectOffset(self.view.frame, 0, movement); [UIView commitAnimations]; } 

Tikiuosi, kad šis kodas jums padės.

„Swift 2“

 func animateTextField(textField: UITextField, up: Bool) { let movementDistance:CGFloat = -130 let movementDuration: Double = 0.3 var movement:CGFloat = 0 if up { movement = movementDistance } else { movement = -movementDistance } UIView.beginAnimations("animateTextField", context: nil) UIView.setAnimationBeginsFromCurrentState(true) UIView.setAnimationDuration(movementDuration) self.view.frame = CGRectOffset(self.view.frame, 0, movement) UIView.commitAnimations() } func textFieldDidBeginEditing(textField: UITextField) { self.animateTextField(textField, up:true) } func textFieldDidEndEditing(textField: UITextField) { self.animateTextField(textField, up:false) } 

SWIFT 3

  func animateTextField(textField: UITextField, up: Bool) { let movementDistance:CGFloat = -130 let movementDuration: Double = 0.3 var movement:CGFloat = 0 if up { movement = movementDistance } else { movement = -movementDistance } UIView.beginAnimations("animateTextField", context: nil) UIView.setAnimationBeginsFromCurrentState(true) UIView.setAnimationDuration(movementDuration) self.view.frame = self.view.frame.offsetBy(dx: 0, dy: movement) UIView.commitAnimations() } func textFieldDidBeginEditing(textField: UITextField) { self.animateTextField(textField: textField, up:true) } func textFieldDidEndEditing(textField: UITextField) { self.animateTextField(textField: textField, up:false) } 
241
02 авг. atsakymas pateikiamas sumanthkodi 02 rug . 2011-08-02 09:48 '11 ne 9:48 2011-08-02 09:48

Tiesiog naudokite „TextFields“:

1a) Interface Builder : pasirinkite All TextFields => Edit => Įterpti => ScrollView

1b) Rankiniu būdu įterpti teksto laukus į UIScrollView pavadinimą scrollView

2) Įdiekite UITextFieldDelegate

3) Nustatykite kiekvieną textField.delegate = self; (arba prijungti Interface Builder )

4) Kopijuoti / įklijuoti:

 - (void)textFieldDidBeginEditing:(UITextField *)textField { CGPoint scrollPoint = CGPointMake(0, textField.frame.origin.y); [scrollView setContentOffset:scrollPoint animated:YES]; } - (void)textFieldDidEndEditing:(UITextField *)textField { [scrollView setContentOffset:CGPointZero animated:YES]; } 
133
01 дек. Atsakymas duotas DAS 01 d. 2012-12-01 17:53 '12, 17:53, 2012-12-01 17:53

Visuotiniam sprendimui . Štai mano požiūris į IQKeyboardManager įgyvendinimą.

2019

110
17 июля '13 в 21:18 2013-07-17 21:18 Atsakymas, kurį pateikė Mohd Iftekhar Qurashi , liepos 17 d. 13 val. 21:18 2013-07-17 21:18

UIScrollView , „ UITableView ir net „ UICollectionView poklasį, kuris rūpinasi visų teksto laukų perkėlimu iš klaviatūros.

Kai klaviatūra pasirodys, poklasis suras raktą, kuris bus redaguojamas, ir koreguos jo rėmelį bei turinį, kad įsitikintumėte, jog vaizdas yra matomas, su animacija, atitinkančia klaviatūros įrankių patarimą. Kai klaviatūra išnyksta, ji atkuria jo dydį.

Ji turėtų veikti su bet kuriuo įrenginiu, naudojant sąsają su „ UITableView , arba vienu rankiniu vaizdu.

Čia: teksto laukų perkėlimo iš klaviatūros sprendimas

100
12 апр. Atsakymą pateikė Michael Tyson balandžio 12 d 2011-04-12 14:33 '11 prie 14:33 2011-04-12 14:33

Swift“ programuotojams:

Tai padarys viską, kas jums tinka, tiesiog įdėkite juos į savo peržiūros valdiklio klasę ir įgyvendinkite „ UITextFieldDelegate “ savo peržiūros valdiklyje ir nustatykite tekstąField deleguoti self

 textField.delegate = self // Setting delegate of your UITextField to self 

Įgyvendinti delegavimo atgalinio ryšio metodus:

 func textFieldDidBeginEditing(textField: UITextField) { animateViewMoving(true, moveValue: 100) } func textFieldDidEndEditing(textField: UITextField) { animateViewMoving(false, moveValue: 100) } // Lifting the view up func animateViewMoving (up:Bool, moveValue :CGFloat){ let movementDuration:NSTimeInterval = 0.3 let movement:CGFloat = ( up ? -moveValue : moveValue) UIView.beginAnimations( "animateView", context: nil) UIView.setAnimationBeginsFromCurrentState(true) UIView.setAnimationDuration(movementDuration ) self.view.frame = CGRectOffset(self.view.frame, 0, movement) UIView.commitAnimations() } 
85
30 апр. „Satnam Sync“ atsakė 30 Bal 2015-04-30 14:21 '15, 14:21 2015-04-30 14:21

Jau yra daug atsakymų, tačiau nė vienas iš pirmiau minėtų sprendimų neturėjo fantastiško pozicionavimo, reikalingo „tobulai“ be klaidų, atgalinio suderinamumo ir neriboto animacijos. (klaida animuojant rėmelius / rėmelius ir turinįOffset kartu, skirtingos sąsajos kryptys, klaviatūra su iPad klaviatūra, ...)
Leiskite bendrinti savo sprendimą:
(jei įdiegėte UIKeyboardWill(Show|Hide)Notification )

 // Called when UIKeyboardWillShowNotification is sent - (void)keyboardWillShow:(NSNotification*)notification { // if we have no view or are not visible in any window, we don't care if (!self.isViewLoaded || !self.view.window) { return; } NSDictionary *userInfo = [notification userInfo]; CGRect keyboardFrameInWindow; [[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] getValue: // the keyboard frame is specified in window-level coordinates. this calculates the frame as if it were a subview of our view, making it a sibling of the scroll view CGRect keyboardFrameInView = [self.view convertRect:keyboardFrameInWindow fromView:nil]; CGRect scrollViewKeyboardIntersection = CGRectIntersection(_scrollView.frame, keyboardFrameInView); UIEdgeInsets newContentInsets = UIEdgeInsetsMake(0, 0, scrollViewKeyboardIntersection.size.height, 0); // this is an old animation method, but the only one that retains compaitiblity between parameters (duration, curve) and the values contained in the userInfo-Dictionary. [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:[[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]]; [UIView setAnimationCurve:[[userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue]]; _scrollView.contentInset = newContentInsets; _scrollView.scrollIndicatorInsets = newContentInsets;  if (_focusedControl) { CGRect controlFrameInScrollView = [_scrollView convertRect:_focusedControl.bounds fromView:_focusedControl]; // if the control is a deep in the hierarchy below the scroll view, this will calculate the frame as if it were a direct subview controlFrameInScrollView = CGRectInset(controlFrameInScrollView, 0, -10); // replace 10 with any nice visual offset between control and keyboard or control and top of the scroll view. CGFloat controlVisualOffsetToTopOfScrollview = controlFrameInScrollView.origin.y - _scrollView.contentOffset.y; CGFloat controlVisualBottom = controlVisualOffsetToTopOfScrollview + controlFrameInScrollView.size.height; // this is the visible part of the scroll view that is not hidden by the keyboard CGFloat scrollViewVisibleHeight = _scrollView.frame.size.height - scrollViewKeyboardIntersection.size.height; if (controlVisualBottom > scrollViewVisibleHeight) { // check if the keyboard will hide the control in question // scroll up until the control is in place CGPoint newContentOffset = _scrollView.contentOffset; newContentOffset.y += (controlVisualBottom - scrollViewVisibleHeight); // make sure we don't set an impossible offset caused by the "nice visual offset" // if a control is at the bottom of the scroll view, it will end up just above the keyboard to eliminate scrolling inconsistencies newContentOffset.y = MIN(newContentOffset.y, _scrollView.contentSize.height - scrollViewVisibleHeight); [_scrollView setContentOffset:newContentOffset animated:NO]; // animated:NO because we have created our own animation context around this code } else if (controlFrameInScrollView.origin.y < _scrollView.contentOffset.y) { // if the control is not fully visible, make it so (useful if the user taps on a partially visible input field CGPoint newContentOffset = _scrollView.contentOffset; newContentOffset.y = controlFrameInScrollView.origin.y; [_scrollView setContentOffset:newContentOffset animated:NO]; // animated:NO because we have created our own animation context around this code } } [UIView commitAnimations]; } // Called when the UIKeyboardWillHideNotification is sent - (void)keyboardWillHide:(NSNotification*)notification { // if we have no view or are not visible in any window, we don't care if (!self.isViewLoaded || !self.view.window) { return; } NSDictionary *userInfo = notification.userInfo; [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:[[userInfo valueForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]]; [UIView setAnimationCurve:[[userInfo valueForKey:UIKeyboardAnimationCurveUserInfoKey] intValue]]; // undo all that keyboardWillShow-magic // the scroll view will adjust its contentOffset apropriately _scrollView.contentInset = UIEdgeInsetsZero; _scrollView.scrollIndicatorInsets = UIEdgeInsetsZero; [UIView commitAnimations]; } 
63
01 марта '13 в 22:41 2013-03-01 22:41 Atsakymą pateikė Martinas Ullrichas kovo 13 d. 13 val. 22:41 2013-03-01 22:41

Shiun sakė: "Kaip paaiškėjau, manau, kad UIScrollView iš tikrųjų numato netiesiogiai esamą redaguotą UITextField matomą >

60
06 нояб. atsakymas pateikiamas 2006 m. lapkričio 6 d. 2010-11-06 08:25 '10, 08:25, 2010-11-06 08:25

Galbūt manote, kad jūs kada nors norite naudoti UITextField . UITextFields jokių gerai suprojektuotų „iPhone“ programų, kurios iš tikrųjų naudoja UITextFieldsUITableViewCells .

Tai bus šiek tiek papildomas darbas, bet aš rekomenduoju, kad visi duomenų įvedimo vaizdai būtų įtraukti į lenteles. Pridėkite UITextView savo UITableViewCells .

45
20 июля '09 в 11:18 2009-07-20 11:18 Atsakymą davė Jonathan Sterling liepos 20 d., 09:18, 2009-07-20 11:18

Šiame dokumente aprašomas šios problemos sprendimas. Pažvelkite į šaltinio kodą skyriuje „Turinio perkėlimas po klaviatūra“. Tai gana paprasta.

EDIT: Šiame pavyzdyje pastebimas avarijos atvejis. Galbūt norėsite klausytis UIKeyboardWillHideNotification o ne UIKeyboardDidHideNotification . Priešingu atveju, klaviatūra užsidaro už klaviatūros, kai klaviatūra uždaro animaciją.

44
28 окт. Mihai Damian atsakymas, pateiktas spalio 28 d. 2010-10-28 15:37 '10, 15:37, 2010-10-28 15:37

Самое быстрое найденное решение

 - (void)textFieldDidBeginEditing:(UITextField *)textField { [self animateTextField: textField up: YES]; } - (void)textFieldDidEndEditing:(UITextField *)textField { [self animateTextField: textField up: NO]; } - (void) animateTextField: (UITextField*) textField up: (BOOL) up { const int movementDistance = 80; // tweak as needed const float movementDuration = 0.3f; // tweak as needed int movement = (up ? -movementDistance : movementDistance); [UIView beginAnimations: @"anim" context: nil]; [UIView setAnimationBeginsFromCurrentState: YES]; [UIView setAnimationDuration: movementDuration]; self.view.frame = CGRectOffset(self.view.frame, 0, movement); [UIView commitAnimations]; } 
32
ответ дан Xar E Ahmer 25 окт. '14 в 14:10 2014-10-25 14:10