再次导航时滚动视图没有响应

时间:2011-05-17 08:12:00

标签: iphone ios

我创建了一个基于导航的小应用程序。当我点击表格行时,它显示控制器中添加了UIScrollViewTextFields的数量,当我返回主控制器,然后我再次导航到该控制器,它不滚动和仍包含textfield中的先前值。我无法知道问题出在哪里。

这是我的代码:

rootcontroller.m

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
   switch(indexPath.row)
    {       
        case 1: 
            if(insertViewController == nil)
        insertViewController = [[insertView alloc] initWithNibName:@"insertView" bundle:[NSBundle mainBundle]];
            [self.navigationController pushViewController:insertViewController animated:YES];
            break;
            //[insertViewController release];
          }
  }

insertviewcontoller.m

#import "insertView.h"
#import "RootViewController.h"
#import "Foundation/Foundation.h"

#define kTabBarHeight 5.0
#define kKeyboardAnimationDuration 1.0

@implementation insertView
@synthesize scroll;
- (void)viewDidLoad {
    [super viewDidLoad];

        //for scrolling

    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(keyboardWillShow:) 
                                                 name:UIKeyboardWillShowNotification 
                                               object:self.view.window];
    // register for keyboard notifications
    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(keyboardWillHide:) 
                                                 name:UIKeyboardWillHideNotification 
                                               object:self.view.window];
      keyboardIsShown = NO;
    //make contentSize bigger than your scrollSize (you will need to figure out for your own use case)
    CGSize scrollContentSize = CGSizeMake(320, 345);
    self.scroll.contentSize = scrollContentSize;

}


- (void)viewDidUnload {
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
    [[NSNotificationCenter defaultCenter] removeObserver:self 
                                                    name:UIKeyboardWillShowNotification 
                                                  object:nil]; 
    // unregister for keyboard notifications while not visible.
    [[NSNotificationCenter defaultCenter] removeObserver:self 
                                                    name:UIKeyboardWillHideNotification 
                                                  object:nil];  
}


- (void)keyboardWillHide:(NSNotification *)n
{
    NSDictionary* userInfo = [n userInfo];

    // get the size of the keyboard
    NSValue* boundsValue = [userInfo objectForKey:UIKeyboardBoundsUserInfoKey];
    CGSize keyboardSize = [boundsValue CGRectValue].size;


    // resize the scrollview
    CGRect viewFrame = self.scroll.frame;
    // I'm also subtracting a constant kTabBarHeight because my UIScrollView was offset by the UITabBar so really only the portion of the keyboard that is leftover pass the UITabBar is obscuring my UIScrollView.
    viewFrame.size.height += (keyboardSize.height - kTabBarHeight);

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationBeginsFromCurrentState:YES];
    // The kKeyboardAnimationDuration I am using is 0.3
    [UIView setAnimationDuration:kKeyboardAnimationDuration];
    [self.scroll setFrame:viewFrame];
    [UIView commitAnimations];

    keyboardIsShown = NO;
}

- (void)keyboardWillShow:(NSNotification *)n
{
    // This is an ivar I'm using to ensure that we do not do the frame size adjustment on the UIScrollView if the keyboard is already shown.  This can happen if the user, after fixing editing a UITextField, scrolls the resized UIScrollView to another UITextField and attempts to edit the next UITextField.  If we were to resize the UIScrollView again, it would be disastrous.  NOTE: The keyboard notification will fire even when the keyboard is already shown.
    if (keyboardIsShown) {
        return;
    }

    NSDictionary* userInfo = [n userInfo];

    // get the size of the keyboard
    NSValue* boundsValue = [userInfo objectForKey:UIKeyboardBoundsUserInfoKey];
    CGSize keyboardSize = [boundsValue CGRectValue].size;

    // resize the noteView
    CGRect viewFrame = self.scroll.frame;
    // I'm also subtracting a constant kTabBarHeight because my UIScrollView was offset by the UITabBar so really only the portion of the keyboard that is leftover pass the UITabBar is obscuring my UIScrollView.
    viewFrame.size.height -= (keyboardSize.height - kTabBarHeight);

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationBeginsFromCurrentState:YES];
    // The kKeyboardAnimationDuration I am using is 0.3
    [UIView setAnimationDuration:kKeyboardAnimationDuration];
    [self.scroll setFrame:viewFrame];
    [UIView commitAnimations];

    keyboardIsShown = YES;
}
- (void)dealloc {
    [super dealloc];
    [scroll release];
    [nmtf release];
    [phtf release];
    [addtf release];
}

1 个答案:

答案 0 :(得分:0)

viewDidLoad方法更新为viewWillAppear:(BOOL)animated页面中的insertviewcontoller.m