按下enter键时自定义UITextView调整大小

时间:2013-01-02 19:40:24

标签: objective-c ios uitableview resize uitextview

我有一个带有自定义UITextView的UIViewController(CodeTextView),在这个文本视图的左边我有一个自定义的UITableView(LinesTableView)。 LinesTableView包含与CodeTextView对齐的行号。

当我开始编辑CodeTextView并出现键盘时,我会编辑两个视图的大小:

- (void)keyboardAppears:(NSNotification *)notification
{
    [_codeTextView setFrame:CGRectMake(30, 0, 290, self.view.frame.size.height - 216.0f)];
    [_linesTableView setFrame:CGRectMake(0, 0, 30, self.view.frame.size.height - 216.0f)];
}

编辑CodeTextView时,按下按钮时,我会更新LinesTableView:

- (void)updateLines
{
    NSString *plainText = self.text;
    NSArray *components = [plainText componentsSeparatedByString:@"\n"];
    int lines = components.count;
    if([[components lastObject] isEqualToString:@""]) lines--;
    _linesTableView.lines = lines;
    [_linesTableView reloadData];
}

然而,当显示键盘并按下回车键时,CodeTextView会调整大小到原来的高度!当我注释掉[_linesTableView reloadData]时,一切正常。因此,当我重新加载LinesTableView时,不知何故,LinesTableView和CodeTextView会恢复原来的高度。

我不知道如何解决这个问题。我认为这并不难,但我无法想出办法。有人可以帮帮我吗?

提前致谢! :)

1 个答案:

答案 0 :(得分:0)

快速而肮脏的方式是将两个东西放在包装它们的UIView中,这样你就可以调整UIView的大小并使其剪辑它的内容,从而调整实际表的大小。这样,当重新加载数据时,即使视图再次向上扩展,它也将被剪切。在我的脑海中,如果您使用UIScrollView并将2个非滚动组件放入其中,它甚至会更好看。这样,键盘占用的位置不会破坏那么多的体验。