Bau*_*aub 7 iphone xcode objective-c uiscrollview
我有一个应用程序,其视图具有从视图顶部到视图底部的文本字段.我需要它在编辑底部字段时滚动,以便字段可见,但它似乎不能正常工作.
继苹果公司的文档,我把所有的代码到我的程序(清单4-1,4-2),并添加scrollView和activeField网点我的头文件,并将其链接到IB.
问题是,当我单击文本字段时,所有文本字段都会退出视图,直到我关闭键盘.它们向下滚动很远(再次,足够远到没有任何字段可见的地方).
有谁知道这个问题可能是由什么造成的?
我将代码放在Apple Docs中,这样您就可以看到我正在使用的代码而无需点击.
//my .h
IBOutlet UIScrollView *scrollView;
IBOutlet UITextField *activeField;
//.m
// Call this method somewhere in your view controller setup code.
- (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);
scrollView.contentInset = contentInsets;
scrollView.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);
[scrollView setContentOffset:scrollPoint animated:YES];
}
}
// Called when the UIKeyboardWillHideNotification is sent
- (void)keyboardWillBeHidden:(NSNotification*)aNotification
{
UIEdgeInsets contentInsets = UIEdgeInsetsZero;
scrollView.contentInset = contentInsets;
scrollView.scrollIndicatorInsets = contentInsets;
}
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
activeField = textField;
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
activeField = nil;
}
Run Code Online (Sandbox Code Playgroud)
Min*_*ter 33
更新:以下答案已过时.现在您可以使用" TPkeyboardavoiding "库来处理UIScrollView,UITableView等中的所有类型的文本字段操作.尝试一下,让我知道是否有人在集成方面存在问题.
老答案
无需为此功能注册键盘通知.为了将活动textField屏幕置于键盘上方,您只需要设置UIscrollView的contentOffset两种方法,如下所示:
// called when textField start editting.
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
activeField = textField;
[scrollView setContentOffset:CGPointMake(0,textField.center.y-60) animated:YES];
}
// called when click on the retun button.
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
NSInteger nextTag = textField.tag + 1;
// Try to find next responder
UIResponder *nextResponder = [textField.superview viewWithTag:nextTag];
if (nextResponder) {
[scrollview setContentOffset:CGPointMake(0,textField.center.y-60) animated:YES];
// Found next responder, so set it.
[nextResponder becomeFirstResponder];
} else {
[scrollview setContentOffset:CGPointMake(0,0) animated:YES];
[textField resignFirstResponder];
return YES;
}
return NO;
}
Run Code Online (Sandbox Code Playgroud)
注意:所有TextField都应该有增量标签,如1,2,3等等.并将代表设置为自我.
谢谢,
小智 6
自从我找到它之后,我使用了TPKeyboardAvoiding
它工作得很好,而且很容易设置:
它还会自动连接键盘上的"下一步"按钮以切换文本字段.
祝好运!
| 归档时间: |
|
| 查看次数: |
24616 次 |
| 最近记录: |