mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-01-17 11:08:06 +00:00
89 lines
2.5 KiB
Objective-C
Executable file
89 lines
2.5 KiB
Objective-C
Executable file
//
|
|
// TPKeyboardAvoidingScrollView.m
|
|
//
|
|
// Created by Michael Tyson on 30/09/2013.
|
|
// Copyright 2013 A Tasty Pixel. All rights reserved.
|
|
//
|
|
|
|
#import "TPKeyboardAvoidingScrollView.h"
|
|
|
|
@interface TPKeyboardAvoidingScrollView () <UITextFieldDelegate, UITextViewDelegate>
|
|
@end
|
|
|
|
@implementation TPKeyboardAvoidingScrollView
|
|
|
|
#pragma mark - Setup/Teardown
|
|
|
|
- (void)setup {
|
|
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(TPKeyboardAvoiding_keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
|
|
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(TPKeyboardAvoiding_keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
|
|
}
|
|
|
|
-(id)initWithFrame:(CGRect)frame {
|
|
if ( !(self = [super initWithFrame:frame]) ) return nil;
|
|
[self setup];
|
|
return self;
|
|
}
|
|
|
|
-(void)awakeFromNib {
|
|
[self setup];
|
|
}
|
|
|
|
-(void)dealloc {
|
|
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
|
#if !__has_feature(objc_arc)
|
|
[super dealloc];
|
|
#endif
|
|
}
|
|
|
|
-(void)setFrame:(CGRect)frame {
|
|
[super setFrame:frame];
|
|
[self TPKeyboardAvoiding_updateContentInset];
|
|
}
|
|
|
|
-(void)setContentSize:(CGSize)contentSize {
|
|
[super setContentSize:contentSize];
|
|
[self TPKeyboardAvoiding_updateFromContentSizeChange];
|
|
}
|
|
|
|
- (void)contentSizeToFit {
|
|
self.contentSize = [self TPKeyboardAvoiding_calculatedContentSizeFromSubviewFrames];
|
|
}
|
|
|
|
- (BOOL)focusNextTextField {
|
|
return [self TPKeyboardAvoiding_focusNextTextField];
|
|
|
|
}
|
|
- (void)scrollToActiveTextField {
|
|
return [self TPKeyboardAvoiding_scrollToActiveTextField];
|
|
}
|
|
|
|
#pragma mark - Responders, events
|
|
|
|
- (void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
|
|
[[self TPKeyboardAvoiding_findFirstResponderBeneathView:self] resignFirstResponder];
|
|
[super touchesEnded:touches withEvent:event];
|
|
}
|
|
|
|
-(BOOL)textFieldShouldReturn:(UITextField *)textField {
|
|
if ( ![self focusNextTextField] ) {
|
|
[textField resignFirstResponder];
|
|
}
|
|
return YES;
|
|
}
|
|
|
|
-(void)textFieldDidBeginEditing:(UITextField *)textField {
|
|
[self scrollToActiveTextField];
|
|
}
|
|
|
|
-(void)textViewDidBeginEditing:(UITextView *)textView {
|
|
[self scrollToActiveTextField];
|
|
}
|
|
|
|
-(void)layoutSubviews {
|
|
[super layoutSubviews];
|
|
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(TPKeyboardAvoiding_assignTextDelegateForViewsBeneathView:) object:self];
|
|
[self performSelector:@selector(TPKeyboardAvoiding_assignTextDelegateForViewsBeneathView:) withObject:self afterDelay:0.1];
|
|
}
|
|
|
|
@end
|