Tag: uitableview

UITableView入门(有关编写简洁代码的提示)

将表视图添加到视图控制器并设置约束,如下所示。 拖动Table View Cell,并将Style设置为Right Detail,并将单元格标识符设置为’cell’。 稍后我们将相应地进行调整。 我通常按​​照上面显示的方法处理表视图,只是为了给我更大的灵活性。 运行模拟器,您可以看到我们的数据列表已正确填充。 请注意,我们正在使用提供给我们的4种基本样式之一。 继续尝试将tableview 样式更改为Subtitle,然后重新运行模拟器。 很好! 您已经使用一些数据创建了第一个表格视图! 我们已经获得了符合UITableViewDataSource和UITableViewDelegate协议的UIViewController,并将其设置为UITableView的数据源和委托。 这仅适用于几行代码,但可以想象如果UIViewController以后在应用程序中有更多事情要做,该类可能会变得肿。 它将承担太多责任,并且只会使其难以维护,阅读或测试。 因此,让我们继续重构代码。

带有可折叠部分的UITableView

今天,我想演示一种简单的方法来实现具有可折叠/展开部分的UITableView 。 在文章的最后,您将看到完整的Xcode项目的链接。 首先,我尝试使用UITableViewHeaderFooterView,但很快我意识到我会写很多代码,并创建和注册.xib文件,这一点都不好玩。 这就是为什么我决定使用技巧并用简单的UITableViewCell子类替换标头的原因。 在下面的示例中,我将使用Swift3。另外,我认为您熟悉表视图。

UITableView中的多个集合视图

我们是否曾经想过需要多个水平可滚动CollectionView的场景? 如果是,则继续。 我们将逐步进行。 让我们开始 打开Main.storyboard并添加UIViewController。 在UIViewController中添加UITableView并在tableview内添加tableviewcell 在UITableViewCell中添加一个UICollectionView并在其中添加一个UICollectionViewCell 将UITableView的约束设置为UIViewController为 topMargin = 0,leftMargin = 0,rightMargin = 0,bottomMargin = 0 4.在UICollectionViewCell中添加一个新图像,在所有上面添加之后,结构将如下图所示 5.接下来,我们必须将CollectionView的可滚动方向设置为水平。 6.将UITableview委托和数据源连接到UIviewController本身。 7.添加UITableViewCell类型的新文件,并将Storyboard中的CollectionView与新添加的文件连接。 类TableViewCell:UITableViewCell,UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout {@IBOutlet弱var collectionView:UICollectionView!} 8.接下来,在ViewController中,我们将实现UITableView的数据源。 表视图中的numberOfSection将等于所需的collectionview的数量。 在UIViewController中添加以下代码 导入UIKit类ViewController:UIViewController,UITableViewDelegate,UITableViewDataSource {@IBOutlet弱变量tableView:UITableView!部分:Int)->字符串? {返回“ Section Title \(section)”}}重写func didReceiveMemoryWarning(){super.didReceiveMemoryWarning()//处理所有可以重新创建的资源。} func numberOfSections(在tableView中:UITableView)-> Int {return 5} func tableView(_ tableView:UITableView,numberOfRowsInSection部分:Int)-> Int {返回1} func tableView(_ tableView:UITableView,cellForRowAt indexPath:IndexPath)-> UITableViewCell {如果让单元格= tableView.dequeueReusableCell(withIdentifier:“ tableViewCell”,的:indexPath)为? TableViewCell {返回单元格}返回UITableViewCell()}} 9.添加一个类型为UICollectionViewCell的新文件。 […]

在iOS App中构建可重用的通用UITableViewController

TableView Controller是一个必不可少的UIKit组件,几乎每个iOS应用程序都使用TableView Controller组件来显示列表中的数据。 当我们要在UITableViewController显示不同类型的数据时,大多数时候我们会创建一个新的子类来显示相关的数据类型。 这种方法有效,但是如果我们的应用程序中有许多不同类型的数据,则可能导致重复和维护困难。 我们如何解决这个问题? 一种方法是,我们可以使用Swift通用抽象数据类型使用简单抽象来创建通用UITableViewController子类,该子类可用于使用Swift通用约束配置和显示不同种类的数据。 您可以在GitHub存储库中找到并构建源项目: alfianlosari / GenericTableViewController 通用UITableViewController实现的示例– alfianlosari / GenericTableViewController github.com 我们创建一个名为GenericTableViewController的UITableViewController子类,并添加2种类型的Generic T和Cell 。 我们添加了约束,即Cell必须是UITableViewCell子类。 T将用作数据的抽象,而Cell将被注册到UITableView并出队以将每行的数据显示为UITableViewCell 。 类 GenericTableViewController :UITableViewController { 变量 :[T] var configure:(Cell,T)-> Void var selectHandler:(T)-> Void init (items:[T],​​配置: @转义 (Cell,T)-> Void,selectHandler: @转义 (T)-> Void){ 自我 .items =项目 自我 .configure =配置 自我 .selectHandler = selectHandler 超级 .init(样式:.plain) self […]

iOS UITableViewの空白行の线を消す

iOSのUITableViewは情报を表示する时にお世话になりますが,何度も使っているのに毎回同じことを调べているようなので记录します。 TableUITableViewを表示すると,次のように线(セパレーター)が表示されます。セルを几つか插入しても,最终行のあとに线が表示されています。 .tableFooterViewに空のViewを设定する方法(Swiftコードで) self.tableView.tableFooterView = UIView() ・ StoryBoardの场合,TableViewにフッター用Viewを追加しておく。 XcodeこViewを见てみると,UITableViewに线を出しているのは_UITableViewCellSeparatorViewというもののようです。 消除UITableView下面的多余分隔符 当我设置一个具有4行的表格视图时,在填充的下方仍然有额外的分隔线(或额外的空白单元格)。 stackoverflow.com 如果UITableViewCells为空,则隐藏删除分隔线 我有一个UITableView,其中只有3行,我可以看到这3行。 问题是空的单元格… stackoverflow.com

在iOS Swift中预取UITableView

UITableViewDataSourcePrefetching :iOS 10中的一种协议UITableView,可以异步加载异步数据源。 用户不希望滚动到chhmhoặcđừ滚动s并加载nhữngindexPathtiếptheosắpđượchiệnlên,请确保平滑滚动cho tableviewhoặccollectionview。 Cácbướcthựchiện: TableviewVà数据源 符合协议 tableView 。 prefetchDataSource = 自我 可以通过通讯协议tableView(_:prefetchRowsAt:)加载数据,并可以缓存。 显示数据UI UI tableView(_:cellForRowAt:) 取消加载获取异步任务: tableView(_:cancelPrefetchingForRowsAt:) 生活圈: Khi lnnđầhi hinn单元格,tindex索引路径= 0,hàmprefetchRowsAt索引10索引ti p theotínhtừ索引cuốiđhiệntrênmànhình(内容偏移量)。 Khi用户滚动chậmxuống,hàmprefetchRowsAtsẽtrảvề1索引tiếptheo,tứclà索引thứ11(10 +1)。 Khi用户滚动滚动索引,滚动索引10索引索引滚动索引(内容偏移量)。 Khi用户滚动chậmsauđóđộtngộtđổihướng滚动,hàmprefetchRowsAtsẽtrảvề10 index theohướngđãđổi,đồngthờisẽvàohàmcancelPrefetchingForRowsAttrảvềindexàvđindexà thị。 代码: -Thựchiệnkhaibáo代表 myTable.prefetchDataSource =自我 -实施代表 func tableView(_ tableView:UITableView, prefetchRowsAt indexPaths:[IndexPath]){print(“ Fetching:\(indexPaths)”)//异步加载:数据,图像… func tableView(_ tableView:UITableView, cancelPrefetchingForRowsAt indexPaths:[IndexPath]){print(“ Fetching Cancel:\(indexPaths)”)//取消隐藏các操作异步加载数据 } 您可以跟随đểnhậnnhữngbàiviếtmớinhấtcủamìnhnhé。

一种使用MVVM的表格视图的POP方法。

首先是第一件事。 POP代表面向协议的编程。 POP上有很多现成的资料,因此我将不对其进行详细介绍。 MVVM代表模型视图视图模型。 这是一种设计模式,其中有类或类型,这些类或类型可以分为三类,即模型,视图和视图模型。 这是一篇很棒的文章 了解MVVM。 我选择MVVM而不是MVC(模型视图控制器),因为MVC通常会导致整体式Massive View Controller。 现在开始。 我们首先从为tableviewcellmodel定义协议开始。 tableviewcellmodel将包含该单元格的标识符。 它还将包含其他数据以配置单元。 我们还需要可以使用此tableviewcellmodel配置的tableviewcell。 因此,我们还定义了可配置单元协议。 在这里,无论我们使用POP布局的任何框架都可以通过非常干净的表视图数据源来实现。 我们创建RBConcreteTableViewController ,它是UITableViewController的子类。 它具有RBTableViewModel类型的属性tableViewModel,这意味着它可以使用符合RBTableViewModel的任何类型。 我们重写viewDidLoad()以使用tableViewModel配置tableView。 然后,我们获得了UITableViewDatasource方法的样板代码。 如您所见,该代码更加简洁。 您可以更早地跟踪错误。 我们还避免使用非常庞大的视图控制器。 通过为可配置表视图创建协议,可以出于一致性目的而改进此代码,但是您可以通过遵循上述可配置单元协议的模板来轻松实现此目的。 此处提供了此POP方法的源代码。 您可以继续改进自己的实现。 你喜欢这篇文章吗? 也许尝试以下方法之一: 在Swift中使用ExpressibleByArrayLiteral简化生活 驯服宽松的通知 断点作为调试内容提供者 在核心数据中使用可变类型作为可转换属性的危险 请提供任何反馈以进行改进。 我的TapChief个人资料如下:

双向滚动UITableViews

我已经知道您在想什么……这没有道理。 UITableView是通过垂直滚动来显示其内容的,为什么您要一个双向滚动呢? 当前,在Shine Labs,我们正在构建一个iPad应用程序,该应用程序使用具有非常宽内容的单元格来实现全屏UITableView。 随着开发的进行,客户希望该应用程序同时支持iPad多任务处理和iPhone。 为了做到这一点,我们需要采取一种对时间敏感且微创的方法来适应各种屏幕尺寸。 我们想出的解决方案非常简单,并允许我们重用整个现有的UI,并有一些小的警告。 通过在运行时将UITableView嵌入UIScrollView中,我们可以确定UITableView是否足够宽以容纳其所有内容。 如果没有,我们将其宽度增加一定程度,并使UIScrollView能够水平滚动。 让我们来看一个实际的例子。 在UIViewController的viewDidLoad方法中,我们配置UITableView和UIScrollView的布局。 为了配置布局,我们使用了自动布局抽象库SnapKit来使约束代码更加简洁。 私人 让 scrollView = UIScrollView() 私人 让 tableView = UITableView() 覆盖 func viewDidLoad(){ 超级 .viewDidLoad() configureConstraints() } 私人 功能 configureConstraints(){ view.addSubview(scrollView) scrollView.snp.makeConstraints { $ 0.edges.equalToSuperview() } scrollView.addSubview(tableView) 让 tableViewWidth = view.frame.width tableView.snp.makeConstraints { $ 0.edges.equalToSuperview() $ 0.height.equalTo(视图) $ 0.width.equalTo(tableViewWidth) } } 我们首先将scrollView边缘固定到视图。 然后,将tableView边缘固定到scrollView […]

如何使用Swift 4.0以编程方式实现UITableView

在本教程中,我将向您展示如何仅使用代码,不使用Storyboard,不使用xib,仅使用代码来创建简单的UITable视图。 让我们潜入…… 打开Xcode并创建一个新的Single View App项目,为其命名为TableView ,单击下一步,将其保存在某个位置,然后单击创建 。 在Xcode导航器中删除ViewController.swift。 在导航器中单击项目名称,转到“常规”选项卡,在“部署信息”下,删除“主要” Storybaord,它应保持空白。 创建一个新的Swift文件并将其命名为TableViewExample 将以下代码添加到刚创建的TableViewExample.swift文件中。 导入UIKitclass TableView:UITableViewController { 让cellId =“ cellId” 覆盖func viewDidLoad(){ super.viewDidLoad() setupTableView()} func setupTableView(){ //注册一个用于创建新表单元格的类。 tableView.register(UITableViewCell.self,forCellReuseIdentifier:cellId) } } 在didFinishLaunchingWithOptions方法中打开AppDelegate.swift 添加以下代码。 窗口= UIWindow() 窗口?.makeKeyAndVisible() window?.rootViewController = TableViewExample() 现在让我们添加那些UITableView委托方法。 打开TableViewExample.swift,然后在文件末尾添加以下扩展名。 扩展TableView { 覆盖func numberOfSections(在tableView中:UITableView)-> Int { 返回1 } 覆盖func tableView(_ tableView:UITableView,numberOfRowsInSection部分:Int)-> Int { 返回5 } 覆盖func tableView(_ […]

在Swift中使用泛型配置多个单元格

iOS开发人员将大部分开发时间用于处理UITableView和UICollectionView。 当您需要显示具有相同数据类型的列表(例如用户列表)时,这非常简单。 但是,如果您需要在一个表视图中显示一堆不同的单元格呢? 这可能导致真正的混乱! 让我们想象以下情况。 我们需要显示具有不同类型单元格的提要; 它可以是UserCell , CommentCell , ImageCell等。 最明显的解决方案是在方法tableView(_:cellForRowAt :)中创建if语句,其外观如下所示。 希望该解决方案能对您的项目有所帮助。 示例项目在GitHub上可用。 谢谢阅读。