如何在 Swift Twitterkit 中继承 TWTRTweetTableViewCell?

How to subclass TWTRTweetTableViewCell in Swift Twitterkit?

我正在尝试找出是否可以从 TwitterKit 库中 subclass TWTRTweetTableViewCell。到目前为止,我的自定义单元格 class 继承自 TWTRTweetTableViewCell。 xib 中有一个 UIView,它有一个单元格 class 的出口,并且 UIView class 设置为 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
    }

}

属性检查器中的单元格class设置为UserTweetViewCell,单元格中UIVIew的class设置为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。我在这里错过了什么?

I wanted to Subclass TWTRTweetTableViewCell so that I could add the likes count, retweets count, reply button etc. so far it hasn't worked. So next I am going to give it a try Subclassing TWTRTweetView and use that in the tableview cell instead. I think I have tried it once with partial success. The challenge is the tweet height

这就是我在 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;
}

我终于做到了,效果非常好。诀窍是 不是 到 subclass TWTRTweetTableViewCell 而是只是 subclass 常规 UITableViewCell 并使用 TWTRTweetView在里面。这基本上就是 TWTRTweetTableViewCell 所做的,它有 tweetView 属性 本质上是 TWTRTweetView 类型的 IBOutlet。自定义单元格 Nib 应包含一个 UIView,其中 TWTRTweetView 设置为身份检查器中的 class。这是代码-

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)
    }

}

对于cell的高度,需要对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 和您可能拥有的任何其他视图在 tableview 单元格中启用自动布局约束非常重要,并确保 Table view cell row height 设置为默认或空白在单元格的大小 inspector.Failing 中这样做会弄乱推文视图高度,并会导致不良结果。