UITextView не изменяет размер при появлении клавиатуры при загрузке из панели вкладок. - PullRequest
0 голосов
/ 15 января 2011

У меня есть простой контроллер представления (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 без изменений.

1 Ответ

0 голосов
/ 16 января 2011

Ваш код выглядит правильно, вы заметили, что вы не выпускаете "textView" в dealloc и "viewDidUnload", но это должно иметь какое-то значение.

Я бы проверил, получены ли уведомления и все ли подключеното есть textView не ноль

...