OC实现代码,UITableViewCell 中添加YYLabel,YYLabel富文本NSMutableAttributedString 中的attachment 里面插入 UITextView ,UITextView高度固定,内容可滚动。并且需要处理UITextView与TableView滚动冲突
时间: 2023-03-23 18:03:30 浏览: 443
首先,您需要将 YYLabel 添加到 UITableViewCell 中。 您可以通过在 UITableViewCell 子类中创建 YYLabel 实例并将其添加到 contentView 中来完成此操作。 您可以使用自动布局或手动布局将 YYLabel 放置在所需的位置上。
接下来,您需要创建 NSMutableAttributedString,其中包含 UITextView 和其他文本。 然后,您可以使用 NSMutableAttributedString 的 insert 方法将 UITextView 作为附件添加到文本中。 以下是一个示例代码片段:
```swift
let textView = UITextView(frame: CGRect(x: 0, y: 0, width: 100, height: 50))
textView.text = "This is a UITextView"
let attachment = NSTextAttachment()
attachment.bounds = CGRect(x: 0, y: 0, width: 100, height: 50)
attachment.setAttachmentContent(textView)
let attributedString = NSMutableAttributedString(string: "This is a YYLabel with a UITextView attachment")
attributedString.insert(NSAttributedString(attachment: attachment), at: 21)
yyLabel.attributedText = attributedString
```
最后,您需要处理 UITextView 和 UITableView 之间的交互。您需要将 UITextView 的 isEditable 属性设置为 false,以防止用户编辑文本。您还需要在 UITableViewDelegate 中实现 heightForRowAt 和 estimatedHeightForRowAt 方法来动态计算 UITableViewCell 的高度,以适应包含 UITextView 的 YYLabel。
以下是一个示例 UITableViewDelegate 实现:
```swift
class MyTableViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
tableView.register(MyTableViewCell.self, forCellReuseIdentifier: "cell")
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! MyTableViewCell
// Configure the cell...
return cell
}
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! MyTableViewCell
cell.configure(with: "This is a YYLabel with a UITextView attachment")
return cell.systemLayoutSizeFitting(CGSize(width: tableView.frame.width, height: UIView.layoutFittingCompressedSize.height)).height
}
override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableView.automaticDimension
}
}
```
请注意,此示例实现了一个名为 MyTableViewCell 的 UITableViewCell 子类,该子类包含一个名为 yyLabel 的 YYLabel 实例。 该子类还实现了一个名为 configure(with:) 的方法,该方法接受一个字符串参数,并在 YYLabel 中设置带有 UITextView 附件的 NSMutableAttributedString。
阅读全文