键盘隐藏了StoryBoard中的UITableView

时间:2014-02-20 11:15:51

标签: ios iphone objective-c uitableview storyboard

我正在开发一款iPhone应用程序。我的UITableView上有一个简单的ViewController。在UITableView中,我在单元格中添加UITextField。我的问题是,当我点击特定单元格中的UITextField时,键盘会隐藏整个UITableView。我搜索过它,但无法成功找到解决方案。我正在添加UITextField,如下所示:

UITextField* textField = [[UITextField alloc]initWithFrame:CGRectMake(250, 15, 60, 30)];
textField.delegate = self;
textField.borderStyle = UITextBorderStyleRoundedRect;
textField.autocorrectionType = UITextAutocorrectionTypeNo;
textField.backgroundColor = [UIColor clearColor];
textField.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
textField.tag =TEXT_VIEW_TAG;
[cell.contentView addSubview:textField];

如果有人知道其解决方案,请告诉我。

4 个答案:

答案 0 :(得分:2)

添加UITableViewController实际上可以自己处理。但是,如果您确实需要使用UITableView,但仍希望键盘不要隐藏UITableView,那么当键盘打开时,您需要向上移动UITableView。为此,您可以更改UITextFieldBeginEditing方法中的y位置,也可以使用UIKeyboard通知。您需要在viewDidLoad方法中添加以下代码行:

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(myKeyboardWillHideHandler:)
                                                 name:UIKeyboardWillHideNotification
                                               object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(myKeyboardWillShowHandler:)
                                                 name:UIKeyboardWillShowNotification
                                               object:nil];

然后,您可以添加以下方法:

    - (void) myKeyboardWillHideHandler:(NSNotification *)notification {

            [UIView animateWithDuration:0.2 animations:^{
                YOUR_TBL_VIEW.frame = CGRectMake(YOUR_TBL_VIEW.frame.origin.x, YOUR_TBL_VIEW.frame.origin.y + 80, YOUR_TBL_VIEW.frame.size.width, YOUR_TBL_VIEW.frame.size.height);
            }];
        }

    - (void) myKeyboardWillShowHandler:(NSNotification *)notification {
            [UIView animateWithDuration:0.2 animations:^{
                YOUR_TBL_VIEW.frame = CGRectMake(YOUR_TBL_VIEW.frame.origin.x, YOUR_TBL_VIEW.frame.origin.y - 80, YOUR_TBL_VIEW.frame.size.width, YOUR_TBL_VIEW.frame.size.height);
            }];


}

答案 1 :(得分:1)

尝试在textFieldDidBeginEditing方法

中将此行添加到您的代码中
[self.tableView setContentOffset:CGPointMake(0,textField.center.y-170) animated:YES];

这里170是适合我的价值,你可以试试其他。 希望它可能有所帮助。

答案 2 :(得分:0)

您可以使用UITableViewController课程而不是UIViewController来解决您的问题。

答案 3 :(得分:0)

TextBeginEditing中的一行代码

[self.tableView scrollToRowAtIndexPath:indexpath atScrollPosition:UITableViewScrollPositionTop animated:YES];

它会使你的那一行在那里有很多位置,你可以相应地改变。