У меня есть простой контроллер представления (SecondViewController), используемый для управления UITextview (я создаю простой редактор), это код SecondViewController.h
<code>
@interface SecondViewController : UIViewController {
IBOutlet UITextView *textView;
}
@property (nonatomic,retain) IBOutlet UITextView *textView;
@end
, а это SecondViewController.m
</p>
<p>//
// EditorViewController.m
// Editor
//
// Created by elio d'antoni on 13/01/11.
// Copyright 2011 none. All rights reserved.
//
@implementation SecondViewController
@synthesize textView;</p>
<p>/*
// Implement loadView to create a view hierarchy programmatically, without using a nib.
- (void)loadView {
}
*/</p>
<p>// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"uiViewBg.png"]];
textView.layer.borderWidth=1;
textView.layer.cornerRadius=5;
textView.layer.borderColor=[[UIColor darkGrayColor] CGColor];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillAppear:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillDisappear:) name:UIKeyboardWillHideNotification object:nil];</p>
<p>}</p>
<p>-(void) matchAnimationTo:(NSDictionary *) userInfo {
NSLog(@"match animation method");
[UIView setAnimationDuration:[[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]];
[UIView setAnimationCurve:[[userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue]];
}</p>
<p>-(CGFloat) keyboardEndingFrameHeight:(NSDictionary *) userInfo {
NSLog(@"keyboardEndingFrameHeight method");</p>
<pre><code>CGRect keyboardEndingUncorrectedFrame =
[[userInfo objectForKey: UIKeyboardFrameEndUserInfoKey] CGRectValue];CGRect keyboardEndingFrame = [self.view convertRect: keyboardEndingUncorrectedFrame fromView: nil];return keyboardEndingFrame.size.height;}
- (CGRect) AdjustFrameHeightBy: (CGFloat) изменить multipliedBy: (NSInteger) направление {NSLog (@ "настроить метод");
return CGRectMake(20,
57,
self.textView.frame.size.width,
self.textView.frame.size.height + change * direction);
} - (void) keyboardWillAppear :(NSNotification *) уведомление {NSLog (@ "появляется клавиатура");[UIView beginAnimations: nil context: NULL];[self matchAnimationTo: [уведомления пользователяInfo]];self.textView.frame = [self AdjustFrameHeightBy: [self keyboardEndingFrameHeight: [уведомление userInfo]] multipliedBy: -1];[UIView commitAnimations];} - (void) клавиатураWillDisappear: (NSNotification *) уведомление {NSLog (@ "клавиатура исчезает");[UIView beginAnimations: nil context: NULL];[self matchAnimationTo: [уведомления пользователяInfo]];self.textView.frame = [self AdjustFrameHeightBy: [self keyboardEndingFrameHeight: [уведомления userInfo]] multipliedBy: 1];[UIView commitAnimations];}
// Переопределить, чтобы разрешить ориентации, отличные от портретной ориентации по умолчанию.- (BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation {return YES;}
(void) didReceiveMemoryWarning {// Освобождает представление, если оно не имеет суперпредставления.[super didReceiveMemoryWarning];
// Освобождение любых кэшированных данных, изображений и т. д., которые не используются.}
(void) viewDidUnload {// Освободить все сохраненные подпредставления основного представления.// например, self.myOutlet = nil;}
(void) dealloc {[super dealloc];}
@ end проблема в том, что если загрузить контроллер представления из контроллера панели вкладок, textView не изменяет размер при появлении клавиатуры, но тот же кодработает, если загружено как приложение на основе одного представления.Надеюсь, я был достаточно ясен.Я использовал шаблон tabBar, предоставленный xcode без изменений.