cocoa-touch - 显示键盘时缩小所有 View

标签 cocoa-touch ipad ios uisplitviewcontroller

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

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

谢谢

最佳答案

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

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];
    }
}

关于cocoa-touch - 显示键盘时缩小所有 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4706601/

相关文章:

ios - 触摸时取消 UIButton 触摸

ios - 调用【super loadView】有什么副作用

ios - 当 UITableView 嵌入到 UIPageViewController 中时,如何使用 hidesBarsOnSwipe 隐藏 NavigationBar?

ios - 为什么我不能使用 "List"作为 UITableViewController 子类的类名?

iphone - 我如何感知用户将手指按住屏幕而不移动?

iphone - 使用多个窗口的 iOS 完整版/精简版

iphone - Xcode - 创建 csv/电子表格文件

iphone - 设置 UIWebView scrollView delegate 导致错误

ios - 在 NSUserDefaults 中以未排序的方式获取 allKeysForObject 数组

ios - Xamarin Forms 上的错误 MT0026