我正在使用故事板和桌面视图。我的tableview中的每个单元格都有一个UIView
。是否可以通过编程方式替换此IBOutlet
的{{1}}?例如,做这样的事情:
UIView
如果我尝试这样做没有任何反应。
我知道很多人会问:“你为什么要这样做?”这就是:我正在使用这个库VIMVideoPlayer,我在代码中创建了包含UIView的实际播放器。我没有重复使用播放器,而是在代码中一次创建它们,现在想要显示它们。这真的归结为在主线程上重新滚动和滞后的性能原因。
注意:我已经在代码中使用了这个但是真的想要使用故事板。我在代码中工作的方式是这样做:
class CustomTableViewCell: UITableViewCell {
@IBOutlet weak var videoPlayerView: UIView! /// Really this is a VIMVideoPLayerView (from library below) which inherits from UIView.
func configureCell(with customObject: CustomObject) {
// Set the IBOutlet in code here.
self.videoPlayerView = customObject.videoPlayerView
}
}
有什么想法吗?
答案 0 :(得分:3)
修改变量很好,但这不会改变视图层次结构。 您需要将新视图插入到原始视图superview中,然后删除旧视图。 请记住,这不会保留任何布局约束,您需要在添加替换视图后重新创建它们。
class CustomTableViewCell: UITableViewCell {
@IBOutlet weak var videoPlayerView: UIView! /// Really this is a VIMVideoPLayerView (from library below) which inherits from UIView.
func configureCell(with customObject: CustomObject) {
// Replace the view by inserting a new view into the same location
// in the view hierarchy
let newVideoPlayerView = customObject.videoPlayerView
videoPlayerView.superview.insertSubview(newVideoPlayerView, belowSubview: videoPlayerView)
videoPlayerView.removeFromSuperview()
// Set the IBOutlet in code here.
videoPlayerView = newVideoPlayerView
// TODO: Recreate your layout constraints
}
}
答案 1 :(得分:0)
您可以这样做,但您当前的所有代码都在更新属性。您需要从视图层次结构中删除现有视图,并将新视图添加为子视图。
func configureCell(with customObject: CustomObject) {
// Set the IBOutlet in code here.
self.videoPlayerView.removeFromSuperview()
self.videoPlayerView = customObject.videoPlayerView
self.addSubView(self.videoPlayerView)
}
请注意,您可能还需要添加新视图所需的任何约束