UITableViewCell如何加载Subview

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UITableViewCell如何加载Subview相关的知识,希望对你有一定的参考价值。

我想在一个小块的ViewController动态加载一个小的View,就像好多网页FLASH做的分块。因为大小的原因我用了UITableViewCell作为底部控制器,加载是时候就是用addSubview这个函数。大概的代码是这样的:- (IBAction)switchButtonPressed:(id)sender UIButton *tempButton = (UIButton *)sender;//这个是判断用户点的那个按键,根据不同的按键加载不同的视图 if(tempButton == frButton)//当用户点是的第一个按钮 FrSwitchView *frController = [[FrSwitchView alloc] initWithNibName:@"FrSwitchView" bundle:nil];//实例化第一个视图控制器 [self.baseRootCell addSubview:frController.view];//baseRootCell是UITableViewCell的对象,加载上面实例化的试图。 [frController release]; //当运行到addSubview时候,代码跳到@synthesize baseRootCell这然后就会收到EXC_BAD_INSTRUCTION这样的信息。各位老大帮我看看是什么原因?

参考技术A 首先肯定是对cell的contentView做修改。contentViewReturns the content view of of the cell object. (read-only)@property(nonatomic, readonly, retain) UIView *contentViewDiscussionThe content view of a UITableViewCell object is the default superview for content displayed by the cell. 看这句话:If you want to customize cells by simply adding additional views, you should add them to the content view so they will be positioned appropriately as the cell transiti***** into and out of editing mode.所以应该先拿到contentView并保存,然后用这个view来添加subview

如何重新加载 uitableviewcell 内的集合视图

【中文标题】如何重新加载 uitableviewcell 内的集合视图【英文标题】:how to reload a collectionview that is inside a tableviewcell 【发布时间】:2016-02-25 08:20:48 【问题描述】:

我在 tableViewCell 中有一个 collectionView

例如: 信用:How to use StoryBoard quick build a collectionView inside UITableViewCell

我想在更新信息时重新加载collectionView。

我已经在 collectionView 的 cellForItemAtIndexPath 中打印了一个打印件来测试它是否被调用,但它不是。如何让 collectionView 重新加载?

【问题讨论】:

我投票结束这个问题作为离题,因为它不是真正的问题,因为“我只需要调用 cell.collectionView.reloadData()” 【参考方案1】:

我知道怎么做!在我的 tableViewCell 类中,我只需要将 collectionView 链接为一个出口,所以在我的 tableViewCell 的cellForRowAtIndexPath 中,我只需要调用cell.collectionView.reloadData()

【讨论】:

添加 cell.collectionView.reloadData() 后,CollectionView 滚动在我的项目中非常慢。如何解决这种问题。 我也面临同样的问题。我们如何解决滚动缓慢的问题? 在集合视图上尝试以下操作 - invalidateLayout 和 layoutIfNeeded【参考方案2】:

最简单的方法

for cell in tableView.visibleCells 
    (cell as? YourTableViewCell)?.collectionView.reloadData()

或者 如果需要重新加载具体UICollectionView

if let cell = tableView.cellForRow(at: IndexPath(row: 0, section: 0)) as? YourTableViewCell 
   cell.collectionView.reloadData()

【讨论】:

【参考方案3】:

使用UITableViewindexPath.row 为集合视图创建标签,并使用标签创建UICollectionView 的实例并重新加载!

【讨论】:

【参考方案4】:

第一个在 tableview 单元格上创建这个函数:

func collectionReloadData()
        DispatchQueue.main.async(execute: 
            self.collectionView.reloadData()
        )
    

然后从

调用它
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell  ...

    cell.collectionReloadData()

【讨论】:

以上是关于UITableViewCell如何加载Subview的主要内容,如果未能解决你的问题,请参考以下文章

如何重新加载 uitableviewcell 内的集合视图

出队时如何阻止`UITableViewCell`中的`UIWebView`重新加载?

如何从自定义 UITableViewCell 调用操作以重新加载 tableView

如何从 nib 文件加载 UITableViewCell 高度?

UIWebView 完成加载后,如何强制重新布局 UITableViewCell?

如何将 JSON 数组中的所有记录加载到 UITableViewCell 中?