移动位于键盘下的UITextField
问题描述:
所以就像我确信每个iOS程序员遇到问题,当试图让页面充满UITextFields时,显然键盘出现时它覆盖了一半。所以我去了苹果的文档,阅读了所有关于它的文章,并为它写了代码,但它不适合我。每当我运行视图崩溃。在此先感谢您的帮助。移动位于键盘下的UITextField
.h
文件
@interface NewUserViewController : UIViewController{
}
- (IBAction)signMeUpButtonPressed:(id)sender;
@property (weak, nonatomic) IBOutlet UITextField *activeField;
@property (weak, nonatomic) IBOutlet UIScrollView *contentScrollView;
@property (weak, nonatomic) IBOutlet UIButton *backButton;
@property (weak, nonatomic) IBOutlet UILabel *firstNameLabel;
@property (weak, nonatomic) IBOutlet UITextField *firstNameInput;
@property (weak, nonatomic) IBOutlet UILabel *lastNameLabel;
@property (weak, nonatomic) IBOutlet UITextField *lastNameInput;
@property (weak, nonatomic) IBOutlet UILabel *usernameLabel;
@property (weak, nonatomic) IBOutlet UITextField *usernameInput;
@property (weak, nonatomic) IBOutlet UILabel *emailLabel;
@property (weak, nonatomic) IBOutlet UITextField *emailInput;
@property (weak, nonatomic) IBOutlet UILabel *passwordLabel;
@property (weak, nonatomic) IBOutlet UITextField *setPasswordInput;
@property (weak, nonatomic) IBOutlet UILabel *reenterPasswordLabel;
@property (weak, nonatomic) IBOutlet UITextField *checkSetPasswordInput;
@property (weak, nonatomic) IBOutlet UIButton *signMeUpButton;
所有连接到其网点(除活跃的领域。林不知道它所属或者它应该被连接到)
.m
文件
@implementation NewUserViewController
@synthesize contentScrollView;
@synthesize activeField;
@synthesize firstNameLabel, lastNameLabel, usernameLabel, emailLabel, passwordLabel, reenterPasswordLabel;
@synthesize firstNameInput, lastNameInput, usernameInput, emailInput, setPasswordInput, checkSetPasswordInput;
@synthesize backButton, signMeUpButton;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
activeField = textField;
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
activeField = nil;
}
- (void)registerForKeyboardNotifications
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWasShown:)
name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillBeHidden:)
name:UIKeyboardWillHideNotification object:nil];
}
// Called when the UIKeyboardDidShowNotification is sent.
- (void)keyboardWasShown:(NSNotification*)aNotification
{
NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);
contentScrollView.contentInset = contentInsets;
contentScrollView.scrollIndicatorInsets = contentInsets;
// If active text field is hidden by keyboard, scroll it so it's visible
// Your application might not need or want this behavior.
CGRect aRect = self.view.frame;
aRect.size.height -= kbSize.height;
if (!CGRectContainsPoint(aRect, activeField.frame.origin)) {
CGPoint scrollPoint = CGPointMake(0.0, activeField.frame.origin.y-kbSize.height);
[contentScrollView setContentOffset:scrollPoint animated:YES];
}
}
// Called when the UIKeyboardWillHideNotification is sent
- (void)keyboardWillBeHidden:(NSNotification*)aNotification
{
UIEdgeInsets contentInsets = UIEdgeInsetsZero;
contentScrollView.contentInset = contentInsets;
contentScrollView.scrollIndicatorInsets = contentInsets;
}
- (IBAction)signMeUpButtonPressed:(id)sender {
}
答
试试这个:
- (void)keyboardWasShown:(NSNotification *)notification {
NSDictionary* userInfo = [notification userInfo];
CGRect keyboardEndFrame;
[[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] getValue:&keyboardEndFrame];
//offset is global
offset = contentScrollView.contentOffset;
CGRect viewFrame = contentScrollView.frame;
CGRect keyboardFrame = [self convertRect:keyboardEndFrame toView:nil];
viewFrame.size.height -= keyboardFrame.size.height;
contentScrollView.frame = viewFrame;
UITextField *current = (UITextField *)[self findFirstResponder];
CGRect textFieldRect = current.frame;
[contentScrollView scrollRectToVisible:textFieldRect animated:YES];
}
- (UIView *)findFirstResponder {
for (UIView *subView in scrollView.subviews) {
if ([subView isFirstResponder]){
return subView;
}
}
return nil;
}
- (void) keyboardWillBeHidden:(NSNotification *)notification {
//scrollViewFrame is global the first frame of you scrollview
contentScrollView.frame = scrollViewFrame;
contentScrollView.contentOffset =offset;
}
这不是一个完整的代码,这只是执行你想要做的一点逻辑。
如果发生崩溃,请确保发布崩溃的相关输出,以帮助我们找出错误。发现崩溃发生的位置非常困难,但没有更多信息:) – Bergasms
您需要在滚动面板中添加控件,并在出现键盘时使用滚动显示控件。 –
***由于未捕获异常'NSUnknownKeyException',原因:'[ setValue:forUndefinedKey:]:此类不是符合密钥值的关键字firstNameLable。 –
nfoggia