iPhoneのデフォルトのSMSアプリと同じように、送信ボタンとカメラボタンを持つツールバーのUITextViewにUIImageViewを挿入したいと思います。
4 に答える
を使用し、その中でsとsUIScrollView
を管理する方がよいでしょう。 テキストとインラインで画像を追加することはサポートされていません。実際、複数行のテキスト以外は実際にはサポートしていません。UITextView
UIImageView
UITextView
以下のコメントによると、テキスト入力ボックスの一部として画像を取得するために私が考えることができる3つのことがあります。
- を使用していません
UITextView
が、代わりにカスタムビューを使用しています。そのようなことを再現するのは難しいです。 - それらは、サブビューとして
UIImageView
オーバーをオーバーレイしUITextView
、のcontentInsetを設定して、UITextView
オーバーラップがないようにします。 - 彼らは、サブビューとサブビュー
UIView
の両方を含み、UITextView
必要UIImageView
に応じてそれらのサブビューを単純に配置するために、別個のものを使用しています。
2と3はどちらも非常に似ており(わずかに異なるアプローチ)、おそらく最善のアプローチです。個人的には、両方のビューの位置を最も細かく制御できるので、おそらく3が最適だと思いますが、2でも問題なく動作するはずです。
アーロンに同意します。私が見たものに基づくと、ネイティブSMSアプリは、実際には高度に変更されたTableCellを備えたUITableViewであると思います。TableCellsは、Aaronが提案したように、UITextViewとUIImageViewを含む複合ビューです。
前もってもう少し作業が必要かもしれませんが、上記の要素を使用して独自のUITableCellを定義するカスタマイズは非常に便利であり、iOSの全体的なパラダイムに沿ったものになると思います。ネイティブパラダイムを使用する場合は、それらに反対する/周囲のパラダイムよりもはるかにうまく機能します。
乾杯
要件に応じて画像とテキストを含むhtmlファイルを作成し、そのhtmlファイルをwebviewにロードしようとする提案が1つあります。
ここでは、特定のテキストを太字にすることもできます。
見栄えが良く、テキストフィールドだと思います。
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))];
}];
}