如何在Swift Twitterkit中继承TWTRTweetTableViewCell?

时间:2017-11-03 23:32:41

标签: ios swift twitterkit

我试图找出是否可以从TwitterKit库中继承TWTRTweetTableViewCell。到目前为止,我的自定义单元类继承自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。我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

我终于做到了,它的工作就像一个魅力。诀窍是到子类Button x = findViewById(R.id.TextFieldHere);,而只是将常规TWTRTweetTableViewCell子类化并在其中使用UITableViewCell。这基本上是TWTRTweetView的作用,它具有TWTRTweetTableViewCell属性,本质上是tweetView类型IBOutlet。自定义单元格TWTRTweetView应包含Nib,并在身份检查器中设置UIView作为其类。这是代码 -

TWTRTweetView

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

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设置为默认或空白单元格的大小检查器。如果这样做会弄乱推文视图高度并导致不良结果。

enter image description here

答案 1 :(得分:0)

  

我想要Subtrlass TWTRTweetTableViewCell,以便我可以添加喜欢计数,转发计数,回复按钮等等到目前为止它还没有工作。接下来我将尝试对子类化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;
}