文本字段和textview的NSNotification问题

时间:2009-12-19 13:44:04

标签: objective-c

实际上我在tableview的第六部分中有textfield,在textview的第11部分有textview。我的问题是当我点击第六部分的texfield时,键盘覆盖了文本字段,同样的事情是发生在textview.for,我使用NSNotificationCenters。 我把代码编写为:

- (无效)viewWillAppear中:(BOOL)动画{

tableView.tableFooterView=nil;
[self reloadView];  
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) 
                                             name:UIKeyboardWillShowNotification object:self.view.window]; 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) 
                                             name:UIKeyboardWillHideNotification object:self.view.window];
[tableView reloadData]; 

}

- (无效)setViewMovedUp:(BOOL)movedUp {

[UIView beginAnimations:nil context:NULL];     [UIView setAnimationDuration:0.5]; //如果你想向上滑动视图     CGRect rect = mview.frame;     if(movedUp)     {
        rect.origin.y = rect.origin.y - kOFFSET_FOR_KEYBOARD;         rect.size.height = rect.size.height + kOFFSET_FOR_KEYBOARD;         }     其他     {         rect.origin.y = rect.origin.y + kOFFSET_FOR_KEYBOARD;         rect.size.height = rect.size.height - kOFFSET_FOR_KEYBOARD;     }     mview.frame = rect;

[UIView commitAnimations];

}

  • (void)keyboardWillShow:(NSNotification *)notif { // printf(“\ n键盘将显示”); //键盘现在会显示出来。取决于哪个文本字段处于活动状态,向上移动或向下移动视图

    if([notesTextView isFirstResponder]&& mview.frame.origin.y> = 0) {
        [self setViewMovedUp:YES]; } 否则if(![notesTextView isFirstResponder]&& mview.frame.origin.y< 0) {     [self setViewMovedUp:NO]; }

    else if([wineryTextField isFirstResponder]&& mview.frame.origin.y> = 0) {
        [self setViewMovedUp:YES]; } 否则if(![wineryTextField isFirstResponder]&& mview.frame.origin.y< 0) {     [self setViewMovedUp:NO]; }

}

  • (void)keyboardWillHide:(NSNotification *)notif { // printf(“\ n键盘将隐藏”); //键盘现在会显示出来。取决于哪个文本字段处于活动状态,向上移动或向下移动视图

    if([notesTextView isFirstResponder]&& mview.frame.origin.y> = 0) {     [self setViewMovedUp:YES]; } 否则if(![notesTextView isFirstResponder]&& mview.frame.origin.y< 0) {     [self setViewMovedUp:NO]; }

    else if([wineryTextField isFirstResponder]&& mview.frame.origin.y> = 0) {     [self setViewMovedUp:YES]; } 否则if(![wineryTextField isFirstResponder]&& mview.frame.origin.y< 0) {     [self setViewMovedUp:NO]; }

}

  • (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)范围 replacementText:(NSString *)文本 { if([text isEqualToString:@“\ n”]){

    //event.eventNotes = notesTextView.text;
    
     if(textView==notesTextView)
    {
    
        //[self setViewMovedUp:NO];
        [textView resignFirstResponder];
    }
    return NO;
    

    }

    返回YES;

}

  • (BOOL)textFieldShouldReturn:(UITextField *)textField {

    if(textField == wineryTextField) {     [self setViewMovedUp:NO];     [wineryTextField resignFirstResponder]; } }

以上是我为滚动视图而编写的代码。但问题是有时候当我点击文本字段时它向下滚动而不是向上滚动。同样发生了与textView相关的问题。我导航到另一个控制器并返回并点击eighter texfield或textview。

请为我的问题提供完美的解决方案。

感谢你们所有人......

1 个答案:

答案 0 :(得分:0)

您可能需要考虑使用以下UITableView方法:

- (void)selectRowAtIndexPath:(NSIndexPath *)indexPath
                    animated:(BOOL)animated
              scrollPosition:(UITableViewScrollPosition)scrollPosition

其中indexPath包含您想要在顶部显示的行,scrollPosition是UITableViewScrollPositionTop。

如果您希望tableview向后滚动,请使用以下UITableView方法保存位于可见屏幕顶部的行。

- (NSArray *)indexPathsForVisibleRows

然后使用上面提到的第一种方法,滚动到已保存的行。