我想在具有发送和相机按钮的工具栏的 UITextView 中插入 UIImageView,其方式与 iPhone 默认 SMS 应用程序相同。
4 回答
您最好使用 aUIScrollView
并在其中管理UITextView
s 和UIImageView
s 。 UITextView
不支持添加与文本内联的图像。事实上,它实际上不支持多行文本以外的任何内容。
根据您在下面的评论,我可以想到三件事来将图像作为文本输入框的一部分:
- 他们没有使用
UITextView
,而是使用一些自定义视图。这种东西很难复制。 - 他们将 a 作为子视图覆盖
UIImageView
并UITextView
设置 contentInset ,UITextView
因此没有重叠。 - 他们使用单独
UIView
的来包含UITextView
和UIImageView
作为子视图,并根据需要简单地排列这些子视图。
2 和 3 都非常相似(只是方法略有不同),可能是您最好的方法。就个人而言,我认为 3 可能是最好的,因为它可以让您最大程度地控制两个视图的位置,但 2 也应该可以正常工作。
我同意亚伦。根据我所见,我相信原生 SMS 应用实际上是一个 UITableView,它带有高度修改的 TableCells。然后 TableCells 是包含 UITextView 和 UIImageView 的复合视图,正如 Aaron 建议的那样。
前面可能需要做更多的工作,但我认为您会发现自定义使用上述元素定义自己的 UITableCell 将非常有用,并且符合整个 iOS 范例。当您使用本机范式时,事情会比反对/围绕它们工作得更好。
干杯
您可以使用 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))];
}];
}
我有一个建议,尝试根据您的要求制作带有图像和文本的 html 文件,并将该 html 文件加载到 webview 中。
在这里,您还可以支持一些特定的文本粗体等。
我觉得很好看然后文本字段。
要使 webview 看起来像简单的滚动视图,只需将此方法放入您的代码中
别忘了写这个
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];
}
}
我希望这可以帮助你。