【问题标题】:Shrink all views when keyboard is displayed显示键盘时缩小所有视图
【发布时间】:2011-01-16 16:36:18
【问题描述】:

我正在开发一个带有 UISplitViewController 的应用程序,我想知道实现以下目标的最佳方法是什么:

在详细视图中,我有一个 UITextView 用于编辑 txt 文件。但是,当键盘出现在屏幕上时,我希望缩小所有视图(主视图和细节视图)以反映新尺寸。这可能吗?

谢谢

【问题讨论】:

    标签: cocoa-touch ipad ios uisplitviewcontroller


    【解决方案1】:

    是的,这是可能的。您需要注册以下通知,

    UIKeyboardWillShowNotification 和 UIKeyboardWillHideNotification。

    并为每个指定处理程序。

    然后在处理程序中,您需要调整/缩小 UITextView 的框架。请注意,通知将包含一个具有键盘尺寸的对象。您需要使用它们将您的 textview 缩小相应的数量。

    Here is some similar sample code you can refactor
    
     // 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(keyboardWasHidden:)
                                                 name:UIKeyboardDidHideNotification object:nil];
    
    keyboardShown=NO;
    
    }
    - (void)resizeTextView
    {
        float margin=[contentTextBox frame].origin.x;
        //margin=0.0;
        CGRect rect0 = [[container scrollView] frame];
        CGRect rect1 = [contentTextBox frame];
        //shrink textview if its too big to fit with textview
        if(rect0.size.height<rect1.size.height){
            rect1.size.height=rect0.size.height-2*margin;
            [contentTextBox setFrame:rect1];        
        }
        //make the textview visible if content is bigger than scroll view
        if([[container scrollView] contentSize].height>[[container scrollView] frame].size.height){
            CGPoint point = CGPointMake([[container scrollView] contentOffset].x,[contentTextBox frame].origin.y-margin);
            [[container scrollView] setContentOffset:point animated:YES];       
        }
    }
    - (void)keyboardWasShown:(NSNotification*)aNotification
    {   
        //keyboard is already visible just exit
        if (keyboardShown)
            return;
        keyboardShown=YES;
        //resize the content text box and scroll into view
        if(activeTextView!=nil){
            [self resizeTextView];
        }
        //scroll text field into view
        if(activeTextField!=nil){
            //get the text field rectangle
            CGRect rect = [activeTextField frame];
            //adjust to the current page of the scroll view
            rect.origin.x=[[container scrollView] contentOffset].x;
            [[container scrollView] scrollRectToVisible:rect animated:YES];
        }
    
    }
    - (void)keyboardWasHidden:(NSNotification*)aNotification
    {   
        //keyboard not visible just exit
        if (!keyboardShown)
            return;
        keyboardShown=NO;
    
        //resize the content text box
        if(contentTextBox!=nil){
            //find where the bottom of the texview should be from the label location
            CGRect rect0=[contentTextBoxBottom frame];
            //get the current frame
            CGRect rect1=[contentTextBox frame];
            //adjust width
            rect1.size.width=rect0.size.width;
            //adjust height
            rect1.size.height=rect0.origin.y-rect1.origin.y;
            //restore the size of the textview
            [contentTextBox setFrame:rect1];
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 2016-08-17
      • 2020-07-25
      • 1970-01-01
      • 1970-01-01
      • 2011-09-26
      • 2015-05-31
      相关资源
      最近更新 更多