0

我有一個包含多個嵌入UITextField的視圖,這個UIView從屬於IB中的UIScrollView。當用戶完成編輯字段時,每個文本字段應該調用在viewcontroller實現文件中定義的稱爲updateText的方法。出於某種原因,方法updateText永遠不會被調用。任何人有任何想法如何去解決這個問題?如果UIScrollView不存在於項目中,但在輸入過程中鍵盤會覆蓋文本字段,這種方法很容易解決,這很煩人。現在,我的文本字段在鍵盤出現時向上移動,但編輯完成後不會觸發該方法。UIView,UIScrollView和UITextFields問題調用方法

這是我實現文件:


#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 
+0

我想說再次驗證行動,並確保xib被保存...至少這是我一直與IB的問題。 – anq 2010-02-16 19:17:25

回答

0

我想你已經知道,因爲發佈日期的解決方案。

您可以實施textFieldShouldReturn方法並從方法中的textField中退出第一響應者。

textFieldDidEndEditing在textField退出第一響應者之後調用。