1

我试图找出是否可以TWTRTweetTableViewCell从 TwitterKit 库中进行子类化。到目前为止,我的自定义单元类继承自TWTRTweetTableViewCell. xib 中有一个 UIView,它有一个到单元格类的出口,并且 UIView 类设置为 TWTRTweetView. 像这样-

class UserTweetViewCell: TWTRTweetTableViewCell {
    @IBOutlet weak var tweetViewCustom: TWTRTweetView!
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

}

属性检查器中单元格的类设置为UserTweetViewCell,单元格中 UIVIew 的类设置为TWTRTweetView

在主视图控制器中我有这个

tableView.register(UserTweetViewCell.self, forCellReuseIdentifier: tweetTableReuseIdentifier)

进而

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let tweet = tweetsarr[indexPath.row]

        let cell = tableView.dequeueReusableCell(withIdentifier: tweetTableReuseIdentifier, for: indexPath) as! UserTweetViewCell
        cell.tweetViewCustom.showActionButtons = false
        cell.tweetViewCustom.linkTextColor = UIColor(red:0.12, green:0.53, blue:0.90, alpha:1.0)
        cell.tweetViewCustom.configure(with: tweet as? TWTRTweet)
        cell.tweetViewCustom.theme = .light
        cell.tweetViewCustom.delegate = self

        return cell
    }

但是,我在行出现错误,cell.tweetViewCustom.showActionButtons = false错误是Unexpectedly found nil while unwrapping an Optional value. 我在这里想念什么?

4

2 回答 2

1

我终于做到了,它就像一个魅力。诀窍不是子类化TWTRTweetTableViewCell,而是仅仅子类化一个正则UITableViewCell并使用TWTRTweetView它的内部。这基本上是什么TWTRTweetTableViewCell,它具有tweetView本质上是IBOutlettype的属性TWTRTweetView。自定义单元格Nib应包含一个UIViewwithTWTRTweetView集合作为它在身份检查器中的类。这是代码 -

class CustomTweetCell: UITableViewCell{
    @IBOutlet weak var customTweetView: TWTRTweetView!

    override func awakeFromNib() {
        super.awakeFromNib()
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

    }

    func configureCell(with tweet: TWTRTweet){
        self.customTweetView.showActionButtons = false
        self.customTweetView.configure(with: tweet)
    }

}

对于单元格的高度,需要对 tableview 进行以下操作-

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        let tweet = tweets[indexPath.row]
        let tweetheight = TWTRTweetTableViewCell.height(for: tweet as! TWTRTweet, style: .compact, width: self.view.frame.width, showingActions: false) + 30 //this 30 should be the height of any additional views that you put in the cell Nib file
        return tweetheight
    }

注意:在表格视图单元格中启用自动布局约束TWTRTweetView以及您可能拥有的任何其他视图,并确保Table view cell row height在单元格的大小检查器中将其设置为默认或空白,这一点非常重要。如果不这样做会弄乱推文视图高度,会导致不良结果。

在此处输入图像描述

于 2017-12-03T06:07:34.560 回答
0

我想将 TWTRTweetTableViewCell 子类化,以便我可以添加喜欢计数、转发计数、回复按钮等。到目前为止它还没有工作。所以接下来我将尝试 Subclassing TWTRTweetView 并在 tableview 单元格中使用它。我想我已经尝试过一次并取得了部分成功。挑战在于推文高度

这就是我在 Objective-c 中计算推文高度的方式:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
TWTRTweet * tweet = self.tweets[indexPath.row]; 
    if (self.tweets.count > indexPath.row) {
       [self.prototypeCell configureWithTweet:tweet];
    }
    CGFloat tweetHeight = [CustomTweetTableViewCell heightForTweet:tweet style:TWTRTweetViewStyleCompact width:[tableView bounds].size.width showingActions:YES];

    self.tweetHeights[indexPath.row] = [NSNumber numberWithFloat:tweetHeight];

    return tweetHeight;
}
于 2017-12-01T16:39:10.840 回答