Tag: Uitableviewcell

将UICollectionViews添加到自定义UITableViewCell Xib教程(Swift 4 Xcode 9.2)

我惊讶地发现在UITableViewCell中实现UICollectionView有多少绊脚石。 因此,我将把我使用的大量资源汇编成一个连贯的起点。 注意:这不是针对初学者的教程。 它假定您了解tableViews以及使用xib文件制作自定义单元格。 它也不会涉及使收藏夹视图看起来不错的任何事情。 在收藏夹视图中拖动 添加约束 找出您不能将CollectionViewCells添加到新添加的集合视图中。 原来,您需要一个单独的文件来容纳要显示的任何“收藏夹视图”单元格。 (当您的UICollectionView在Xib文件中时) 您可以在CollectionViewCell Xib中做任何您想做的事情,就本教程而言,我将更改背景色。 确保为您的单元格提供一个resuableIdentifier。 步骤1:返回您的tableViewCells Xib文件。 步骤2:显示文件大纲 步骤3:控制从您的collectionView拖动到“文件的所有者”,然后选择dataSource,然后再次进行选择代理。 步骤4:控制从collectionView拖动到TableViewCell类,然后创建IBOutlet 步骤5:将tableViewCell类与UICollectionViewDelegate和UICollectionViewDataSource一致 将UICollectionViewDelegate和UICollectionViewDataSource添加到类描述 在awakeFromXib中创建collectionView的数据源并委托= self 添加numberOfItemsInSection函数 添加cellForItemAt函数 创建一个带有您的reuseIdentifier的单元,并向下转换为您的自定义单元。 命中运行。 它将立即崩溃。 我们需要“为该标识符注册一个笔尖或类,或者在情节提要中连接原型单元”。 在您的tableViewCell从Nib唤醒的情况下,添加以下行: self.collectionView.register(UINib.init(nibName:“ CollectionViewCell”,包:nil),forCellWithReuseIdentifier:“ collectionViewID”) 生成并再次运行。 它将起作用。 这是更新的tableViewCell的代码: 故障排除步骤: 我的标识符是否已分配并正确? 我是否已从我的collectionView拖动到Xib文件中的文件所有者? 希望这会有所帮助。 如果您愿意,请给我鼓掌。 如果有问题请发表评论。 伊恩(Ian)-aestusLabs

使用Swift泛型处理单元动作

给iOS开发人员一个 表格视图 ,他将编写10多个有关如何处理单元格操作的实现。 由于我们在Chili Labs中经常处理表格和集合,因此我想提出一个通用的解决方案,以解决项目中的单元动作。 我之前的文章中介绍的使用单元配置器的解决方案效果很好。 因此,将其作为基本模式可能是一个好主意。 首先,让我们添加TableDirector类,该类将存储单元配置器,并将成为UITableView的委托和数据源。 首先,我们需要向CellAction枚举中再添加一种情况,并返回其hashValue。 这里最具挑战性的事情是如何将自定义操作传递给CellActionProxy对象。 可以通过NotificationCenter发送通知来完成。 我们可以为CellAction枚举添加扩展,以方便地发送通知。 动作数据将存储在结构中,并通过userInfo参数发送。 最后,我们需要在TableDirector类中订阅并处理通知。 现在我们可以调用“跟随”动作并进行处理。 而已! 现在,我们有了一种机制,可以通用地处理任何单元操作。 进行少量修改,即可用于处理UICollectionViewCell操作。

使用Swift创建自定义UITableViewCell

在 programmingwithswift.github.io上 查看我的其他帖子 UITableViews是iOS开发中最常用的视图之一。 大多数时候,您会想创建自定义UITableViewCells,因此在本教程中,我将向您展示如何创建自定义UITableViewCells。 在开始之前,我假设您已经有一个UITableView设置。 步骤1:建立新的Cocoa Touch类别 步骤2:设计单元 对于单元格设计,我将将高度设置为60,然后添加UITextField和UIButton。 稍后,我们将它们连接到UITableViewCell视图类。 将高度设置为60,请参见下图: 然后将UITextField和UIButton拖放到该视图中。 这就是我的风格。 下面是UITextField约束设置的图像: UIButton约束如下: 步骤3:向UITableView注册新的自定义UITableViewCell 注册新的自定义表格视图单元格。 在用于表视图的视图控制器中添加一个名为registerTableViewCells()的函数。 确保您有权访问表格视图。 您将需要使用tableview来注册新单元格。 您的函数应如下所示: 此代码正在注册一个新的自定义UITableViewCell。 在第一行中,我们创建一个新的UINib实例,第一个参数是nibName。 这必须是您创建的新单元格的名称,即文件名。 在第二行中,我们告诉UITableView我们要向其注册哪些新的自定义单元格,我们需要传递之前在该行中创建的UINib实例,然后需要为新单元格提供重用标识符。 在这种情况下,我只是使用文件名作为重用标识符,但是您可以根据需要提供任何名称。 步骤4:调用registerTableViewCells方法 为了调用上面创建的函数,我在viewDidLoad()函数中对其进行了调用。 我的viewDidLoad()函数如下所示: 步骤5:更新CellForRowAtIndexPath函数 为了使用新的单元格,您需要将以下代码添加到cellForRow委托方法中 只要确保使用您为类命名的名称和重用标识符来更新标识符和类名即可。 就是这样! 现在,您可以运行该应用程序,并且应该会在表格视图中看到自定义的UITableViewCell。 现在我们只需要在新单元格上连接UITextField和UIButton。 连接这些控件时,我们要做的只是打印您在文本字段中键入的文本。 步骤6:为UITextField和UIButton创建出口和功能 在此步骤中,您将需要创建您的商店。 我在下面提供了一张图像,该图像显示了我所做的事情。 完成创建网点后,您将需要创建一个新功能,如下图所示。 此函数将从文本字段获取值。 您现在应该可以运行该项目。 运行它时,应该显示一个自定义UITableViewCell。 您还应该能够在文本字段中键入一些内容,当您点击按钮时,它应该在Xcode的控制台中打印您在文本字段中键入的任何文本。

UITableView iOS中的自定义单元格

自定义UITableViewCell可以允许使用功能强大,动态且响应迅速的界面。 通过广泛的自定义并结合其他技术,您可以执行以下操作:更改特定的属性或界面元素,以便在单元中进行更改或设置动画或绘制图素;在用户滚动浏览时有效地加载视频,甚至从用户下载时显示图片网络。 这里的可能性几乎是无限的。 以下是自定义单元格的简单示例: 在包含tableView的UIViewController中,注册新的自定义单元格的类(请参见下文)。 请注意,仅当您未在表视图的界面中设计带有情节提要的单元格时,才有必要。 迅速 覆盖func viewDidLoad(){ super.viewDidLoad() //注册单元格类 tableView.register(CustomTableViewCell.self,forCellReuseIdentifier: CustomTableViewCell.identifier) } 如果您选择使用XIB文件,请改为registerNib //注册笔尖 tableView.register(UINib(nibName:CustomTableViewCell.identifier,bundle:nil), forCellReuseIdentifier:CustomTableViewCell.identifier) 现在您的tableView知道了您的自定义单元,您可以在cellForRowAtIndexPath中将其出队: 迅速 func tableView(tableView:UITableView,cellForRowAtIndexPath indexPath:NSIndexPath)-> UITableViewCell { //加载CustomTableViewCell。 确保此处提供的标识符与您的单元格中的标识符匹配 让单元格:CustomTableViewCell = tableView.dequeueReusableCellWithIdentifier(CustomTableViewCell.identifier)为! CustomTableViewCell //这就是神奇的地方-在自己的单元格上设置自定义属性 cell.customLabel.text =“我的自定义单元” 返回单元 }

如何在UITableViewCell中自动调整Textview的大小

在开发iOS应用中经常遇到Tableview放文本视图,之前都是自己算算单元高度,首先介绍如何利用autoresize来自动调整cell高度。 建立TextViewCell继承UITableViewCell 加上TextView:在xib拉TextView到单元格上 加上TableView委托的程序码 如果没有autoresize会像这样 全部都挤在一起… 运行! 你会发现在编辑TextView的时候,Cell并不会自动缩放。 所以要在TextView发生改变的时候,更新TableView 在TextViewCell加上下面的程式码

Swift Nifty TableViewCell技巧

像那里的每个Swift开发人员一样,我开始喜欢TableViewCells和面向协议的编程 。 很好,因为今天的技巧结合了两者! 让我们看看在 Swift中注册TableViewCell的常用方法: 首先让我困扰的是容易出错的字符串用法,然后说实话,在99%的时间内 ,单元格标识符只是字符串Cell类名。 也许有些人知道我要去哪里 与Swift中一样,从协议开始: 然后通过实现如下协议使您的单元“ 可重用 ”: 在这里而不是实现它,我们将使用Swift的Protocols Extensions为所有可重用对象提供默认值   ! 默认情况下, reuseIdentifier将是该类的名称! 因此,您现在可以编写: 好的,我们摆脱了容易出错的字符串,但是等一下我们可以做得更好,不是吗? 奖金 辛苦了! 让我们提供一种注册可重用单元格的较短方法 。 再次,救援协议! 在这里,我们说,如果您是注册可重用 TableViewCell的TableView,则默认情况下使用单元格的redirectIdentifier。 现在您可以简单地致电: 恐怕我们要尽力而为🎉🎉🎉 包起来 在这里,我们使用了Swift惊人的协议扩展 ,在TableViewCells的一种非常常见的用法中删除了易于出错的字符串标识符。 我们使代码既简短又清晰,同时使我们不必手工编写所有UITableViewCells复用标识符! 请记住,最好的代码是您不必编写的代码🙂

UITableView iOS中的分隔线

编辑分隔线的宽度 您可以通过更改单元格上的layoutMargins:属性来设置使表格视图的分隔线在表格中扩展到各种宽度。 这可以通过多种方式来实现。 更改特定单元格的分隔线 在表视图数据源的cellForRowAtIndexPath:方法或 willDisplayCell:方法中,将单元格的layoutMargins:属性设置为UIEdgeInsetsZero(扩展到表的整个宽度),或者设置为此处所需的值。 目标C [cell setLayoutMargins:UIEdgeInsetsZero]; //也可以使用spacerInset [cell setSeparatorInset:UIEdgeInsetsZero]; 迅速 func tableView(tableView:UITableView,willDisplayCell单元格:UITableViewCell,forRowAtIndexPath indexPath:NSIndexPath){ cell.separatorInset = UIEdgeInsetsZero cell.layoutMargins = UIEdgeInsetsZero } func tableView(tableView:UITableView,cellForRowAtIndexPath indexPath:NSIndexPath)-> UITableViewCell { cell.separatorInset = UIEdgeInsetsZero cell.layoutMargins = UIEdgeInsetsZero } 删除所有分隔线 每个单元格之间的细灰色线可能并不完全是您要的外观。 将它们隐藏起来非常简单。 在您周围的UIViewController的viewDidLoad:方法中,添加以下代码。 您也可以在加载或重新加载表视图之前随时设置此属性(不一定需要在viewDidLoad:方法中)。 迅速: tableView.separatorStyle = .None 目标C: tableView.separatorStyle = UITableViewCellSeparatorStyleNone; 另外,可以通过选择tableView并将分隔符(在属性检查器下)设置为None来在Storyboard或XIB中更改属性。 隐藏多余的分隔线 您可以通过在UITableView的底部设置一个空的页脚视图来隐藏空单元格的UITableViewCell分隔线: 迅速 tableView.tableFooterView = UIView() […]

具有自动调整大小单元格的自调整TableView的简单解决方案

几天前,我读了一篇简单但精彩的文章,名为Swift 4食谱: Dushyant Bansal的自调整表格视图 (底部的链接)。 他在那里所做的工作非常简单易懂。 他覆盖了reloadData()函数和UITableView的intrinsicContentSize变量。 该解决方案对许多应用程序都很方便,我在其中一个项目中使用了它。 我在这里利用他的一些资源来证明他的所作所为。 这是他使用的Custom类。 问题是,它仅适用于相同大小的单元 。 如果要将此SelfSizedTableView类应用于“ 自动调整表”视图单元格大小 ,则需要扭曲intrinsicContentSize变量。 修改后的代码将如下所示: 覆盖var internalContentSize:CGSize { setNeedsLayout() layoutIfNeeded() 设高度=最小值(contentSize.height,maxHeight) 返回CGSize(width:contentSize.width,height) } 只需在计算高度之前添加setNeedsLayout()和layoutIfNeeded() 。 你们都准备好了。 😆 我想提 如果您使用预设数据(不是来自API)用于tableView,请在viewDidAppear()方法中使用tableView.reloadData()获得效果。 如果要从API提取数据,则已经在API响应块中使用了tableView.reloadData() ,不是吗?

如何使用UIScrollView触发UITableViewCell中的滑动操作

最近,我想向UITableViewCells添加快速操作,而不是使用按钮而是使用平移手势,例如可以在许多邮件应用程序中找到的动作。 UIScrollView是最好和最简单的方法。 首先,您将看到如何在UITableViewCell中设置UIScrollView,以显示操作的自定义视图。 然后,您将看到如何通过实现UIScrollViewDelegate通过平移手势执行操作。 1. UITableViewCell设置 首先,创建UITableViewCell的子类。 容器视图将是我们的单元格内容。 动作视图和标签将是滚动显示的视图。 class SwipeCell: UITableViewCell { var scrollView: UIScrollView! var containerView: UIView! var actionView: UIView! var actionLabel: UILabel! } 在初始化程序中调用的方法中,我们实例化此视图并将其添加到视图层次结构中,如下所示: contentView 滚动查看 动作视图 动作标签 containerView 对于scrollView,我们要隐藏滚动指示器。 当用户结束拖动时,我们还希望快速减速。 注意,我们需要设置contentInset以便在scrollView的填充中显示actionView。 func setup() { scrollView = UIScrollView(frame: bounds) scrollView.autoresizingMask = [.flexibleWidth, .flexibleHeight] scrollView.contentSize = bounds.size scrollView.contentInset = UIEdgeInsets( top: 0, left: […]

UITableView自定义大小的单元格(使用UITableViewAutomaticDimension自动计算行高)

一个简单,用途广泛但功能强大的视图,可以使用行和单个列以列表形式显示数据。 用户可以在表视图中垂直滚动项,并可以选择操作和选择内容。 自定格单元 苹果公司推出了自动上浆电池。 使用Autolayout显式地布局UITableViewCells,UITableView会为您处理其余的工作。 行高是自动计算的,默认情况下rowHeight值为UITableViewAutomaticDimension。 在计算自调整大小的单元格时,将使用UITableView属性estimatedRowHeight。 创建自定义大小的表格视图单元格时,需要设置此属性并使用约束来定义 单元的大小。 — Apple,UITableView文档 self.tableView.estimatedRowHeight = 44.0 请注意,如果要为所有单元格设置动态高度,则不需要 tableView的委托的heightForRowAtIndexPath。 只需在必要时以及重新加载或加载表格视图之前设置以上属性。 但是,您可以通过以下功能设置特定单元格的高度,同时使其他单元格动态化: 迅速 覆盖func tableView(tableView:UITableView,heightForRowAtIndexPath indexPath:NSIndexPath)-> CGFloat { 切换indexPath.section { 情况1: 返回60 默认: 返回UITableViewAutomaticDimension } } 目标C -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 开关(indexPath.section){ 情况1: 返回60; 默认: 返回UITableViewAutomaticDimension; } }