UIView,UIScrollView和UITextFields问题调用方法

时间:2010-02-16 19:04:45

标签: iphone-sdk-3.0 delegates uiviewcontroller interface-builder uiscrollview

我有一个带有几个嵌入式UITextField的视图,这个UIView从属于IB中的UIScrollView。当用户完成编辑字段时,每个文本字段都应该调用viewcontroller实现文件中定义的名为updateText的方法。出于某种原因,方法updateText永远不会被调用。任何人有任何想法如何解决这个问题?当UIScrollView在项目中不存在但键盘在输入期间覆盖文本字段时,该方法就被解雇了,这很烦人。现在我的文本字段在键盘出现时会向上移动,但在完成编辑时不会触发该方法。

这是我的实施文件:


#import "MileMarkerViewController.h"


@implementation MileMarkerViewController

@synthesize scrollView,milemarkerLogDate,milemarkerDesc,milemarkerOdobeg,milemarkerOdoend,milemarkerBusiness,milemarkerPersonal,milemarker;


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
        // Initialization code
    }
    return self;
}

- (BOOL) textFieldShouldReturn: (UITextField*) theTextField {
    return [theTextField resignFirstResponder];
}

- (void)viewDidLoad {
    [super viewDidLoad];
    [[NSNotificationCenter defaultCenter] addObserver: self 
                                             selector: @selector(keyboardWasShown:)
                                                 name: UIKeyboardDidShowNotification 
                                               object: nil];

    [[NSNotificationCenter defaultCenter] addObserver: self
                                             selector: @selector(keyboardWasHidden:)
                                                 name: UIKeyboardDidHideNotification 
                                               object: nil];

    keyboardShown = NO; // 1
    [scrollView setContentSize: CGSizeMake( 320, 480)]; // 2
}


- (void)keyboardWasShown:(NSNotification*)aNotification {
    if (keyboardShown) return;

    NSDictionary* info = [aNotification userInfo];

    // Get the size of the keyboard.
    NSValue* aValue = [info objectForKey:UIKeyboardBoundsUserInfoKey];
    CGSize keyboardSize = [aValue CGRectValue].size;

    // Resize the scroll view (which is the root view of the window)
    CGRect viewFrame = [scrollView frame];
    viewFrame.size.height -= keyboardSize.height;
    scrollView.frame = viewFrame;

    // Scroll the active text field into view.
    CGRect textFieldRect = [activeField frame];
    [scrollView scrollRectToVisible:textFieldRect animated:YES];

    keyboardShown = YES;
}

- (void)keyboardWasHidden:(NSNotification*)aNotification {
    NSDictionary* info = [aNotification userInfo];

    // Get the size of the keyboard.
    NSValue* aValue = [info objectForKey:UIKeyboardBoundsUserInfoKey];
    CGSize keyboardSize = [aValue CGRectValue].size;

    // Reset the height of the scroll view to its original value
    CGRect viewFrame = [scrollView frame];
    viewFrame.size.height += keyboardSize.height;
    [scrollView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES];
    scrollView.frame = viewFrame;

    keyboardShown = NO;
}

- (void)textFieldDidBeginEditing:(UITextField *)textField {
    activeField = textField;
}

- (void)textFieldDidEndEditing:(UITextField *)textField {
    activeField = nil;
}




- (IBAction)updateText:(id) sender {

    NSLog(@"You just entered: %@",self.milemarkerLogDate.text);
    self.milemarker.logdate = self.milemarkerLogDate.text;
    self.milemarker.desc = self.milemarkerDesc.text;
    self.milemarker.odobeg = self.milemarkerOdobeg.text;
    self.milemarker.odoend = self.milemarkerOdoend.text;
    self.milemarker.business = self.milemarkerBusiness.text;
    self.milemarker.personal = self.milemarkerPersonal.text;
    NSLog(@"Original textfield is set to: %@",self.milemarker.logdate);
    [self.milemarker updateText];
}

- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

- (void)dealloc {
    [super dealloc];
}


@end

1 个答案:

答案 0 :(得分:0)

我认为由于发布日期,您已经知道了解决方案。

您可以在方法中实施textFieldShouldReturn方法并从textField中撤消第一个响应者。

在textField辞职第一响应者之后调用

textFieldDidEndEditing