【发布时间】:2011-01-16 16:36:18
【问题描述】:
我正在开发一个带有 UISplitViewController 的应用程序,我想知道实现以下目标的最佳方法是什么:
在详细视图中,我有一个 UITextView 用于编辑 txt 文件。但是,当键盘出现在屏幕上时,我希望缩小所有视图(主视图和细节视图)以反映新尺寸。这可能吗?
谢谢
【问题讨论】:
标签: cocoa-touch ipad ios uisplitviewcontroller
我正在开发一个带有 UISplitViewController 的应用程序,我想知道实现以下目标的最佳方法是什么:
在详细视图中,我有一个 UITextView 用于编辑 txt 文件。但是,当键盘出现在屏幕上时,我希望缩小所有视图(主视图和细节视图)以反映新尺寸。这可能吗?
谢谢
【问题讨论】:
标签: cocoa-touch ipad ios uisplitviewcontroller
是的,这是可能的。您需要注册以下通知,
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];
}
}
【讨论】: