Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«iOS. ΠŸΡ€ΠΈΠ΅ΠΌΡ‹ программирования». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 128

Автор Π’Π°Π½Π΄Π°Π΄ Нахавандипур

β€” (void) viewWillAppear:(BOOL)paramAnimated{

[super viewWillAppear: paramAnimated];

NSNotificationCenter *center = [NSNotificationCenter defaultCenter];


[center addObserver: self selector:@selector(handleKeyboardWillShow:)

name: UIKeyboardWillShowNotification object: nil];


[center addObserver: self selector:@selector(handleKeyboardWillHide:)

name: UIKeyboardWillHideNotification object: nil];

}


β€” (void)viewWillDisappear:(BOOL)paramAnimated{

[super viewWillDisappear: paramAnimated];

[[NSNotificationCenter defaultCenter] removeObserver: self];

}

МногиС программисты Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½Π΅Π½Π½ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ: ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ ΡΠ»ΡƒΡˆΠ°Ρ‚ΡŒ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π½Ρ‹Π΅ увСдомлСния, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π²ΠΈΠ΄Π° Π½Π΅ отобраТаСтся Π½Π° экранС. Они Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ ΡΠ»ΡƒΡˆΠ°Ρ‚ΡŒ увСдомлСния Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ viewDidLoad, Π° ΡƒΠ΄Π°Π»ΡΡŽΡ‚ элСмСнты, Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Π²ΡˆΠΈΠ΅ Π² качСствС Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π»Π΅ΠΉ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ dealloc. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅Π½, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ, ΠΊΠΎΠ³Π΄Π° наш Π²ΠΈΠ΄ Π½Π΅ отобраТаСтся Π½Π° экранС, Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° вновь открываСтся Π² ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌ Π²ΠΈΠ΄Π΅, Π²Ρ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° Π²ΠΈΠ΄Π°. Π£Ρ‡Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π½Ρ‹Π΅ увСдомлСния, ΠΊΠ°ΠΊ ΠΈ Π»ΡŽΠ±Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅, ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ всСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ-Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π»ΡΠΌ Π² контСкстС вашСго прилоТСния. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ придСтся ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ€Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Π»Π° Π½Π΅ Π½Π° всС ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π½Ρ‹Π΅ увСдомлСния. Если ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π½Ρ‹Π΅ увСдомлСния ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ ΠΎΡ‚ Π²ΠΈΠ΄Π°, Π½Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ Π½Π° экранС Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ.

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅ ΠΊΠΎΠ΄Π° ΠΌΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ ΡΠ»ΡƒΡˆΠ°Ρ‚ΡŒ увСдомлСния Ρ‚ΠΈΠΏΠ° Β«ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π°Β» Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ экзСмпляра handleKeyboardWillShow: ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° нашСго Π²ΠΈΠ΄Π°. УвСдомлСния Ρ‚ΠΈΠΏΠ° Β«ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° Π±ΡƒΠ΄Π΅Ρ‚ скрыта» ΠΌΡ‹ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ handleKeyboardWillHide:. Пока эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π΅Ρ‰Π΅ Π½Π΅ написаны. НачнСм с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, handleKeyboardWillShow:. Π’ этом ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Π½Π°ΠΌ трСбуСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ высоту ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, воспользовавшись ΠΊΠ»ΡŽΡ‡ΠΎΠΌ UIKeyboardFrameEndUserInfoKey ΠΈΠ· словаря с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ, ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‰Π΅Π³ΠΎ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ содСрТимоС Π²ΠΈΠ΄Π° Π²Π²Π΅Ρ€Ρ… β€” Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ элСмСнты оказались Π½Π°Π΄ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ. Π—Π΄Π΅ΡΡŒ приятно Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ помСстили всС Π½ΡƒΠΆΠ½ΠΎΠ΅ содСрТимоС Π² ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°ΡŽΡ‰Π΅ΠΌΡΡ Π²ΠΈΠ΄Π΅. БоотвСтствСнно, потрСбуСтся всСго лишь ΠΎΡ‚ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΡ€Π°Π΅Π²Ρ‹Π΅ отступы ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ Π²ΠΈΠ΄Π°:


β€” (void) handleKeyboardWillShow:(NSNotification *)paramNotification{


NSDictionary *userInfo = paramNotification.userInfo;


/* ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π½ΠΎΠΉ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ β€” Π²Ρ€Π΅ΠΌΡ, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅

ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° успССт ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒΡΡ Π½Π° ΡΠΊΡ€Π°Π½Π΅. ΠŸΡ€ΠΈ Π°Π½ΠΈΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ

содСрТимого Π²ΠΈΠ΄Π° ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

*/

NSValue *animationDurationObject =

userInfo[UIKeyboardAnimationDurationUserInfoKey];


NSValue *keyboardEndRectObject = userInfo[UIKeyboardFrameEndUserInfoKey];

double animationDuration = 0.0;

CGRect keyboardEndRect = CGRectMake(0.0f, 0.0f, 0.0f, 0.0f);


[animationDurationObject getValue:&animationDuration];

[keyboardEndRectObject getValue:&keyboardEndRect];


UIWindow *window = [UIApplication sharedApplication].keyWindow;


/* ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈΠ· ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π½ΠΎΠΉ систСмы ΠΎΠΊΠ½Π°

Π² ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π½ΡƒΡŽ систСму нашСго Π²ΠΈΠ΄Π°. */

keyboardEndRect = [self.view convertRect: keyboardEndRect

fromView: window];


/* ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌ, Π² ΠΊΠ°ΠΊΠΎΠΉ стСпСни наш Π²ΠΈΠ΄ Π½Π°ΠΊΡ€Ρ‹Ρ‚ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ */

CGRect intersectionOfKeyboardRectAndWindowRect =

CGRectIntersection(self.view.frame, keyboardEndRect);


/* ΠŸΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Π΅ΠΌ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉΡΡ Π²ΠΈΠ΄ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ содСрТимоС

нашСго Π²ΠΈΠ΄Π° ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π»ΠΎΡΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ */

[UIView animateWithDuration: animationDuration animations: ^{


self.scrollView.contentInset =

UIEdgeInsetsMake(0.0f,

0.0f,

intersectionOfKeyboardRectAndWindowRect.size.height,

0.0f);


[self.scrollView scrollRectToVisible: self.textField.frame animated: NO];


}];


}


Π£ нас получился довольно интСрСсный ΠΈ прямолинСйный ΠΊΠΎΠ΄. ЕдинствСнная Π΄Π΅Ρ‚Π°Π»ΡŒ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰Π°Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΡŠΡΡΠ½Π΅Π½ΠΈΡ, β€” это функция CGRectIntersection. Π’ Π½Π΅ΠΉ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΎΠΌ ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π΅ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ (ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Π΅, Π»Π΅Π²ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Π΅, ΡˆΠΈΡ€ΠΈΠ½Π΅ ΠΈ высотС). Π­Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ отобразится Π½Π° экранС. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, зная ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ CGRectIntersection ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, какая Ρ‡Π°ΡΡ‚ΡŒ нашСго Π²ΠΈΠ΄Π° Π½Π°ΠΊΡ€Ρ‹Ρ‚Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ. Π˜Ρ‚Π°ΠΊ, Π±Π΅Ρ€Π΅ΠΌ ΠΊΠΎΠ½Ρ‚ΡƒΡ€ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, ΠΊΠΎΠ½Ρ‚ΡƒΡ€ Π²ΠΈΠ΄Π°, Π° Π·Π°Ρ‚Π΅ΠΌ опрСдСляСм, какая Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π° Π²ΠΈΠ΄Π° Π½Π°ΠΊΡ€Ρ‹Ρ‚Π° ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠΌ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ структуру Ρ‚ΠΈΠΏΠ° CGRect, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Ρ‚ΠΎΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΎΠΉ области Π²ΠΈΠ΄Π°, которая Π½Π°ΠΊΡ€Ρ‹Ρ‚Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€ΠΎΠΉ. Π˜Π·Π²Π΅ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π° появляСтся Π½Π° Π½ΠΈΠΆΠ½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Π΅ экрана ΠΈ Π² Ρ…ΠΎΠ΄Π΅ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ Π²Ρ‹ΠΏΠ»Ρ‹Π²Π°Π΅Ρ‚ Π²Π²Π΅Ρ€Ρ…. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ нас интСрСсуСт Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒ этой области. Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ высоту области пСрСсСчСния ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈ ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π° Π²ΠΈΠ΄Π°, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅ΠΌ Π½Π° эту высоту содСрТимоС Π²ΠΈΠ΄Π°. Π”Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ пСрСмСщСния Π·Π°Π΄Π°Π΅ΠΌ Ρ€Π°Π²Π½ΠΎΠΉ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ выдвиТСния ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, двиТСния ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΡ…ΡΡ экранных элСмСнтов ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.

Π”Π°Π»Π΅Π΅ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ handleKeyboardWillHide:. Π’ Π½Π΅ΠΌ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΡΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρƒ β€” соотвСтствСнно, ΠΎΠ½Π° большС Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ наш Π²ΠΈΠ΄. Π˜Ρ‚Π°ΠΊ, Π² этом ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ всСго лишь трСбуСтся ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΊΡ€Π°Π΅Π²Ρ‹Ρ… отступов ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ Π²ΠΈΠ΄Π° ΠΊ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ значСниям, пСрСнСсти всС элСмСнты ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π²Π½ΠΈΠ·, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΈΠ΄ выглядСл Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ Π΄ΠΎ появлСния ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹:


β€” (void) handleKeyboardWillHide:(NSNotification *)paramSender{


NSDictionary *userInfo = [paramSender userInfo];


NSValue *animationDurationObject =

[userInfo valueForKey: UIKeyboardAnimationDurationUserInfoKey];


double animationDuration = 0.0;


[animationDurationObject getValue:&animationDuration];


[UIView animateWithDuration: animationDuration animations: ^{

self.scrollView.contentInset = UIEdgeInsetsZero;

}];


}


И послСдний Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ наш ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π²ΠΈΠ΄Π° являСтся Π΄Π΅Π»Π΅Π³Π°Ρ‚ΠΎΠΌ тСкстового поля, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΡƒΡ…ΠΎΠ΄ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ с экрана, Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ Return (Π’Π²ΠΎΠ΄) послС Π²Π²ΠΎΠ΄Π° Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² тСкстовоС ΠΏΠΎΠ»Π΅:


β€” (BOOL) textFieldShouldReturn:(UITextField *)paramTextField{

[paramTextField resignFirstResponder];


return YES;

}

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅

Π Π°Π·Π΄Π΅Π»Ρ‹ 1.19 ΠΈ 1.20.

15.4. ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ

Π’Ρ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ-Π±ΡƒΠ΄ΠΈΠ»ΡŒΠ½ΠΈΠΊ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ-ΠΊΠ°Π»Π΅Π½Π΄Π°Ρ€ΡŒ. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΎ событии Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π΄Π°ΠΆΠ΅ Ссли Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ это ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΈΠ»ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ.

РСшСниС

Π˜Π½ΡΡ‚Π°Π½Ρ†ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° UILocalNotification, сконфигурируйтС Π΅Π³ΠΎ (Π΄Π°Π»Π΅Π΅ Π±ΡƒΠ΄Π΅Ρ‚ рассказано ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ это дСлаСтся) ΠΈ Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠΉΡ‚Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° экзСмпляра scheduleLocalNotification:, относящСгося ΠΊ классу UIApplication. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ экзСмпляр ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° вашСго прилоТСния, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ класса sharedApplication, относящимся ΠΊ классу UIApplication.

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅

Если Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΈΠ»ΠΈ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π²ΠΎΠΎΠ±Ρ‰Π΅, систСма Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ локальноС ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ доставку локального увСдомлСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ экзСмпляра scheduleLocalNotification:, относящийся ΠΊ классу UIApplication. Если ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΈ Π² это врСмя срабатываСт Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ локальноС ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ оповСщСния ΠΎΠ± этом. ВмСсто этого iOS Π±Π΅ΡΡˆΡƒΠΌΠ½ΠΎ Π΄Π°Π΅Ρ‚ Π²Π°ΠΌ Π·Π½Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π²Ρ‹Π΄Π°Π½ΠΎ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅, β€” это дСлаСтся Ρ‡Π΅Ρ€Π΅Π· Π΄Π΅Π»Π΅Π³Π°Ρ‚ прилоТСния. Пока Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Π²Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π² Π΄Π΅Ρ‚Π°Π»ΠΈ этого процСсса, рассмотрим Π΅Π³ΠΎ Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅.

МоТно ΠΏΡ€ΠΈΠΊΠ°Π·Π°Ρ‚ΡŒ iOS Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ локальноС ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ, ΠΊΠΎΠ³Π΄Π° вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π°ΠΆΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‚Π°ΠΊΠΈΠ΅ увСдомлСния ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ пСриодичСскими, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ нСдСлю Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ врСмя. ΠŸΡ€ΠΈ этом Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ особСнно Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π°Ρ‚Ρƒ запуска (Fire Date) Π²Π°ΡˆΠΈΡ… ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ.

ΠœΠ΅Ρ‚ΠΎΠ΄ экзСмпляра cancelAllLocalNotifications отмСняСт доставку всСх стоящих Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ, ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΠ²ΡˆΠΈΡ… ΠΎΡ‚ вашСго прилоТСния.

Π£Π²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° UILocalNotification ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ свойств. НаиболСС Π²Π°ΠΆΠ½Ρ‹ΠΌΠΈ ΠΈΠ· Π½ΠΈΡ… ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

β€’ fireDate β€” это свойство Ρ‚ΠΈΠΏΠ° NSDate, ΡΠΎΠΎΠ±Ρ‰Π°ΡŽΡ‰Π΅Π΅ iOS, ΠΊΠΎΠ³Π΄Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½ экзСмпляр локального увСдомлСния. Π”Π°Π½Π½ΠΎΠ΅ свойство являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ;

β€’ timeZone β€” это свойство Ρ‚ΠΈΠΏΠ° NSTimeZone сообщаСт iOS, ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ часовому поясу относится конкрСтная Π΄Π°Ρ‚Π° запуска. Для получСния Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ часового пояса ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ экзСмпляра timeZone, относящийся ΠΊ классу NSCalendar. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ°Π»Π΅Π½Π΄Π°Ρ€ΡŒ, воспользовавшись ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ класса currentCalendar, относящимся ΠΊ Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΠΎΠΌΡƒ классу;