我想在UITextView的工具栏中插入UIImageView,具有发送和相机按钮,其方式与iPhone默认短信应用程序相同。
你最好使用UIScrollView
并管理其中的UITextView
和UIImageView
。 UITextView
不支持添加与文本内联的图像。事实上,除了多行文本之外,它并不真正支持任何其他内容。
根据您在下面的评论,我可以想到三件事来获取图像作为文本输入框的一部分:
- 他们没有使用
UITextView
,而是使用一些自定义视图。 这种事情很难复制。 - 他们将
UIImageView
作为子视图覆盖在UITextView
上,并设置UITextView
的内容内陷,以便没有重叠。 - 他们使用单独的
UIView
将UITextView
和UIImageView
作为子视图包含在内,并根据需要简单地排列这些子视图。
2和3都非常相似(只是方法略有不同),可能是你最好的方法。 就个人而言,我认为 3 可能是最好的,因为它可以让您最大程度地控制两个视图的位置,但 2 也应该可以正常工作。
我同意亚伦的观点。 根据我所看到的,我相信原生短信应用程序实际上是一个具有高度修改的TableCells的UITableView。 然后,TableCells是包含UITextView和UIImageView的复合视图,如Aaron所建议的那样。
前面可能需要做更多的工作,但我认为您会发现使用上述元素定义自己的UITableCell的自定义将非常有用,并且符合整体iOS范式。 当你使用原生范式时,事情比反对/围绕它们工作要好得多。
干杯
我有一个建议,尝试根据您的要求制作带有图像和文本的 html 文件,并将该 html 文件加载到 webview 中。
在这里,您还可以返回一些特定的文本粗体等。
我认为看起来不错,然后文本字段。
要使 Web 视图看起来像简单的滚动视图,只需将此方法放入您的代码中即可
别忘了写这个
webView.opaque = NO;
,
[self hideGradientBackground:webView];
和
- (void) hideGradientBackground:(UIView*)theView
{
for (UIView * subview in theView.subviews)
{
subview.backgroundColor = [UIColor clearColor];
if ([subview isKindOfClass:[UIImageView class]])
subview.hidden = YES;
[self hideGradientBackground:subview];
}
}
我希望这对你有所帮助。
UITextViewDelegate和ContentInset来实现它。
- (void)viewDidLoad
{
self.textView.delegate = self;
[self.textView addSubview:self.addedView];
[self.textView setContentInset:UIEdgeInsetsMake(0, 0, CGRectGetHeight(self.addedView.frame), 0)];
}
- (void)textViewDidChange:(UITextView *)textView
{
NSLog(@"%@",NSStringFromCGSize(textView.contentSize));
__weak typeof(self) wself = self;
[UIView animateWithDuration:0.5f animations:^{
[wself.addedView setFrame:CGRectMake(0, textView.contentSize.height + 10, CGRectGetWidth(wself.addedView.frame), CGRectGetHeight(wself.addedView.frame))];
}];
}