@ -198,12 +198,98 @@ public class AttachmentApprovalViewController: UIPageViewController, UIPageViewC
self . setCurrentItem ( firstItem , direction : . forward , animated : false )
NotificationCenter . default . addObserver ( self ,
selector : #selector ( keyboardWillChangeFrame ( notification : ) ) ,
name : . UIKeyboardWillChangeFrame ,
object : nil )
// N o t i f i c a t i o n C e n t e r . d e f a u l t . a d d O b s e r v e r ( s e l f ,
// s e l e c t o r : # s e l e c t o r ( k e y b o a r d W i l l C h a n g e F r a m e ( n o t i f i c a t i o n : ) ) ,
// n a m e : . U I K e y b o a r d W i l l C h a n g e F r a m e ,
// o b j e c t : n i l )
observers = [
NotificationCenter . default . addObserver ( forName : . UIKeyboardWillShow , object : nil , queue : nil ) { [ weak self ] notification in
guard let strongSelf = self else { return }
guard let userInfo = notification . userInfo else {
owsFailDebug ( " userInfo was unexpectedly nil " )
return
}
guard let keyboardStartFrame = userInfo [ UIKeyboardFrameBeginUserInfoKey ] as ? CGRect else {
owsFailDebug ( " keyboardEndFrame was unexpectedly nil " )
return
}
guard let keyboardEndFrame = userInfo [ UIKeyboardFrameEndUserInfoKey ] as ? CGRect else {
owsFailDebug ( " keyboardEndFrame was unexpectedly nil " )
return
}
Logger . debug ( " UIKeyboardWillShow frame: \( keyboardStartFrame ) -> \( keyboardEndFrame ) " )
strongSelf . keyboardWillShow ( notification : notification )
} ,
// N o t i f i c a t i o n C e n t e r . d e f a u l t . a d d O b s e r v e r ( f o r N a m e : . U I K e y b o a r d D i d S h o w , o b j e c t : n i l , q u e u e : n i l ) { [ w e a k s e l f ] n o t i f i c a t i o n i n
// g u a r d l e t u s e r I n f o = n o t i f i c a t i o n . u s e r I n f o e l s e {
// o w s F a i l D e b u g ( " u s e r I n f o w a s u n e x p e c t e d l y n i l " )
// r e t u r n
// }
//
// g u a r d l e t k e y b o a r d S t a r t F r a m e = u s e r I n f o [ U I K e y b o a r d F r a m e B e g i n U s e r I n f o K e y ] a s ? C G R e c t e l s e {
// o w s F a i l D e b u g ( " k e y b o a r d E n d F r a m e w a s u n e x p e c t e d l y n i l " )
// r e t u r n
// }
//
// g u a r d l e t k e y b o a r d E n d F r a m e = u s e r I n f o [ U I K e y b o a r d F r a m e E n d U s e r I n f o K e y ] a s ? C G R e c t e l s e {
// o w s F a i l D e b u g ( " k e y b o a r d E n d F r a m e w a s u n e x p e c t e d l y n i l " )
// r e t u r n
// }
//
// L o g g e r . d e b u g ( " U I K e y b o a r d D i d S h o w f r a m e : \ ( k e y b o a r d S t a r t F r a m e ) - > \ ( k e y b o a r d E n d F r a m e ) " )
// } ,
NotificationCenter . default . addObserver ( forName : . UIKeyboardWillHide , object : nil , queue : nil ) { [ weak self ] notification in
guard let strongSelf = self else { return }
guard let userInfo = notification . userInfo else {
owsFailDebug ( " userInfo was unexpectedly nil " )
return
}
guard let keyboardStartFrame = userInfo [ UIKeyboardFrameBeginUserInfoKey ] as ? CGRect else {
owsFailDebug ( " keyboardEndFrame was unexpectedly nil " )
return
}
guard let keyboardEndFrame = userInfo [ UIKeyboardFrameEndUserInfoKey ] as ? CGRect else {
owsFailDebug ( " keyboardEndFrame was unexpectedly nil " )
return
}
Logger . debug ( " UIKeyboardWillHide frame: \( keyboardStartFrame ) -> \( keyboardEndFrame ) " )
strongSelf . keyboardWillHide ( notification : notification )
}
// N o t i f i c a t i o n C e n t e r . d e f a u l t . a d d O b s e r v e r ( f o r N a m e : . U I K e y b o a r d D i d H i d e , o b j e c t : n i l , q u e u e : n i l ) { [ w e a k s e l f ] n o t i f i c a t i o n i n
// g u a r d l e t u s e r I n f o = n o t i f i c a t i o n . u s e r I n f o e l s e {
// o w s F a i l D e b u g ( " u s e r I n f o w a s u n e x p e c t e d l y n i l " )
// r e t u r n
// }
//
// g u a r d l e t k e y b o a r d S t a r t F r a m e = u s e r I n f o [ U I K e y b o a r d F r a m e B e g i n U s e r I n f o K e y ] a s ? C G R e c t e l s e {
// o w s F a i l D e b u g ( " k e y b o a r d E n d F r a m e w a s u n e x p e c t e d l y n i l " )
// r e t u r n
// }
//
// g u a r d l e t k e y b o a r d E n d F r a m e = u s e r I n f o [ U I K e y b o a r d F r a m e E n d U s e r I n f o K e y ] a s ? C G R e c t e l s e {
// o w s F a i l D e b u g ( " k e y b o a r d E n d F r a m e w a s u n e x p e c t e d l y n i l " )
// r e t u r n
// }
//
// L o g g e r . d e b u g ( " U I K e y b o a r d D i d H i d e f r a m e : \ ( k e y b o a r d S t a r t F r a m e ) - > \ ( k e y b o a r d E n d F r a m e ) " )
// } ,
]
}
var observers : [ NSObjectProtocol ] = [ ]
override public func viewWillAppear ( _ animated : Bool ) {
Logger . debug ( " " )
super . viewWillAppear ( animated )
@ -238,21 +324,59 @@ public class AttachmentApprovalViewController: UIPageViewController, UIPageViewC
var lastObservedKeyboardHeight : CGFloat = 0
@objc
func keyboardWillChangeFrame ( notification : Notification ) {
Logger . debug ( " " )
func keyboardWillShow ( notification : Notification ) {
guard let userInfo = notification . userInfo else {
owsFailDebug ( " userInfo was unexpectedly nil " )
return
}
// N S D i c t i o n a r y * u s e r I n f o = [ n o t i f i c a t i o n u s e r I n f o ] ;
guard let keyboardStartFrame = userInfo [ UIKeyboardFrameBeginUserInfoKey ] as ? CGRect else {
owsFailDebug ( " keyboardEndFrame was unexpectedly nil " )
return
}
guard let keyboardEndFrame = userInfo [ UIKeyboardFrameEndUserInfoKey ] as ? CGRect else {
owsFailDebug ( " keyboardEndFrame was unexpectedly nil " )
return
}
Logger . debug ( " \( keyboardStartFrame ) -> \( keyboardEndFrame ) " )
lastObservedKeyboardHeight = keyboardEndFrame . size . height
viewControllers ? . forEach { viewController in
guard let prepViewController = viewController as ? AttachmentPrepViewController else {
owsFailDebug ( " unexpected prepViewController: \( viewController ) " )
return
}
prepViewController . updateCaptionViewBottomInset ( )
}
}
@objc
func keyboardWillHide ( notification : Notification ) {
guard let userInfo = notification . userInfo else {
owsFailDebug ( " userInfo was unexpectedly nil " )
return
}
guard let keyboardStartFrame = userInfo [ UIKeyboardFrameBeginUserInfoKey ] as ? CGRect else {
owsFailDebug ( " keyboardEndFrame was unexpectedly nil " )
return
}
guard let keyboardEndFrame = userInfo [ UIKeyboardFrameEndUserInfoKey ] as ? CGRect else {
owsFailDebug ( " keyboardEndFrame was unexpectedly nil " )
return
}
Logger . debug ( " \( keyboardStartFrame ) -> \( keyboardEndFrame ) " )
lastObservedKeyboardHeight = keyboardEndFrame . size . height
if keyboardStartFrame . height = = keyboardEndFrame . height {
lastObservedKeyboardHeight -= keyboardEndFrame . maxY - keyboardStartFrame . maxY
}
viewControllers ? . forEach { viewController in
guard let prepViewController = viewController as ? AttachmentPrepViewController else {