2012-09-10 32 views
0

我有uiscrollview,2 textviewfields和我阅读所有关于键盘隐藏textview的帖子,并尝试了很多方法,但仍然隐藏它。UIScrollView和仍然键盘隐藏文字

我的代码是这样的: ViewController.h

@property(nonatomic,retain) IBOutlet UITextView *campaignTitle; 
@property (weak, nonatomic) IBOutlet UITextView *campaignDescription; 
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView; 
@property UITextView *activeTextView; 

ViewController.m

@synthesize campaignTitle; 
@synthesize campaignDescription; 
@synthesize scrollView; 
@synthesize activeTextView; 

#define SCROLLVIEW_CONTENT_HEIGHT 460 
#define SCROLLVIEW_CONTENT_WIDTH 320 

- (void)viewDidLoad 
{ 
[[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(keyboardWasShown:) 
               name:UIKeyboardDidShowNotification 
               object:nil]; 

    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(keyboardWillHide:) 
               name:UIKeyboardWillHideNotification 
               object:nil]; 
    scrollView.contentSize=CGSizeMake(0, self.view.frame.origin.y+self.view.frame.size.height+50); 
    [super viewDidLoad]; 
} 

- (BOOL) textViewShouldBeginEditing:(UITextView *)textView 
{ 
    textView.text = @""; 
    self.activeTextView = textView; 
    return YES; 
} 

- (BOOL) textViewShouldEndEditing:(UITextView *)textView 
{ 
    self.activeTextView = nil; 
    return YES; 
} 

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 
{ 
    if([text isEqualToString:@"\n"]) 
     [textView resignFirstResponder]; 
    return YES; 
} 

- (void)keyboardWasShown:(NSNotification *)notification 
{ 
    // Step 1: Get the size of the keyboard. 
    CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 
    // Step 2: Adjust the bottom content inset of your scroll view by the keyboard height. 
    UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, keyboardSize.height, 0.0); 
    scrollView.contentInset = contentInsets; 
    scrollView.scrollIndicatorInsets = contentInsets; 
    // Step 3: Scroll the target text field into view. 
    CGRect aRect = self.view.frame; 
    aRect.size.height -= keyboardSize.height; 
    if (!CGRectContainsPoint(aRect, activeTextView.frame.origin)) { 
     CGPoint scrollPoint = CGPointMake(0.0, activeTextView.frame.origin.y - (keyboardSize.height-15)); 
     [scrollView setContentOffset:scrollPoint animated:YES]; 
    } 
} 

- (void) keyboardWillHide:(NSNotification *)notification { 

    UIEdgeInsets contentInsets = UIEdgeInsetsZero; 
    scrollView.contentInset = contentInsets; 
    scrollView.scrollIndicatorInsets = contentInsets; 
} 

- (IBAction)dismissKeyboard:(id)sender 
{ 
    [self.activeTextView resignFirstResponder]; 
} 

有从滚动视图和campaignTitle,campaignDescription代表团。

出了什么问题?为什么键盘仍然隐藏底部uitextview?您可能会看到的额外代码是支持UITextView中的Return按钮

回答

1

确保您的UITextFields实际上位于故事板内的UIScrollView的内部,并且不会意外放置在它下面的UIView中。

setContentOffset应该做SOMETHING,即使它不是预期的效果。由于它看起来什么都没做,我怀疑你的UITextFields不是它的子视图,或者你的UIScrollView没有在界面构建器中连接。

2

或使用TPKeyboardAvoiding。 (通过身份检查在厦门国际银行仍然 )

  1. 添加一个UIScrollView到您的视图控制器的XIB
  2. 的滚动视图类为TPKeyboardAvoidingScrollView
  3. : 这是伟大的工作,而且非常易于安装
  4. 将所有的滚动型

它还可以自动挂钩键盘上了“下一步”按钮,在文本字段内切换的控件。

+0

感谢您的支持!看起来有些落后,iOS本身并不关心这一点。 – Merkidemis