Tag: tableview

自定义表格单元格iOS开发。 – Akhil Koothal

自定义表格单元格iOS开发。 自定义表格单元格是最常用的视图之一,可能在每个应用程序中都可以找到,这里是一些需要注意的基本内容并按照说明进行操作。我将使用已定制表格的现有汽车应用程序完成该项目细胞。 创建一个单元.xib文件 设置单元格的约束 设置该单元格的属性标签 在TableView中显示数据 创建具有任何自定义名称的项目。在视图控制器中,添加TableView并为所有视图设置约束“ 0”。即使您已嵌入导航栏,也将约束设置为“ 0”。 创建一个具有自定义名称的TableViewCell和一个单元格.xib文件。首先将一个UIView保留在单元格中,然后使用此视图作为参考,将所有约束设置为“ 0”,以定义标签。UIView用灰色定义颜色易于理解。在视图中,我有一个汽车图像,汽车名称,汽车里程,成本,所在区域。提及了“ carsDataCell”单元格的标识符。 现在为表视图单元设置了约束,我们必须将所有标签和图像属性拖放到表视图单元文件上。 为此创建一个通用函数,这样您就不会忘记标签。标签中有图像,资产中有静态图像。 首先在视图中加载,然后将委托和数据源设置为self。同时添加UITableViewDelegate和UITableViewDataSource协议。在视图中注册创建的单元格后,请确保正确指定名称。 函数CellForRowAt有一个用cellIdentified定义的单元格,并提到了CellName(CarsTableCell)。然后您可以调用在该单元格中声明的函数。 函数numberOfRowInSection具有定义的行,这些行指定为carsName或carsArea的计数。 定义TableCell的高度,并确保您还为单元格.xib文件中的单元格指定了相同的高度。 这就是今天的美好时光!!

TableView / CollectionView单元格的索引

获取选定单元格的索引是一件容易的事,但是我已经看到很多实现都使用非常奇怪的方法来获取选择的实现,特别是在单元格具有许多按钮/动作来获取其索引的情况下。 让我们回到基础,如何获取选定单元格的索引? 通过简单地实现tableview / collection视图委托 func collectionView(_ collectionView:UICollectionView,didSelectItemAt indexPath:IndexPath){}或:func tableView(_ tableView:UITableView,didSelectRowAt indexPath:IndexPath){} 这些是从用户那里进行选择的基本方法,但是如果我在单元格中只有一个按钮该怎么办? 我认为不必担心按钮,使其对触摸没有反应并让上述选择代表为您处理该按钮是不值得的! 但是,如果我想要该特定按钮怎么办? 如果我有多个按钮可以触发业务逻辑中的多个操作? 这就是处理视图中的触摸并将通知它的两种方法的地方:委托和闭包! 我自己发现,闭包是将视图连接到其父级的一种非常不好的方式,而且开发人员往往会忘记使用弱的或未使用的方式,以阻止两个类相互引用,从而容易导致内存泄漏。 因此,我相信代理人提供了更方便,更清晰的方式来轻松显示交互,更易于阅读,修复甚至通过您的应用进行通用。 要使用委托,人们会将indexPath作为变量发送到单元格,因此它知道它在其控制器内的位置,这是一个后果,因为现在视图知道的内容比其应了解的更多。 通过一个简单的函数调用就可以很容易地从管理它的集合/表视图中获取该信息: tableView.indexPath(for:UITableViewCell) 因此,我们为此目的编写一个协议:通过用户交互通知控制器。 协议TableViewCellDelegate:类{func didSelect(_ cell:UITableViewCell,_ button:UIButton)} 集合怎么样? 协议CollectionViewCellDelegate:类{func didSelect(_ cell:UICollectionViewCell,_ button:UIButton)} 这个功能是您在不同单元格中所需的全部功能,现在它返回对单元格的引用以及在其中单击的按钮! 我们添加了类,因此可以在单元格中将其削弱: 弱var委托:TableViewCellDelegate? 将其添加到您的按钮操作中: @IBAction buttonTapped(_ sender:UIButton){委托?.didSelect(自己,sender) } 就是这样,现在使单元格委托引用您的控制器,并由您的控制器进行确认,现在您已经拥有所有选项卡并与表/集合单元格进行了交互! 扩展UIViewController:TableViewCellDelegate {func didSelect(_ cell:UITableViewCell,_ button:UIButton){保护let index = tableView.indexPath(for:cell)else {return} let tag = button.tag}} 在这里,我们确认它的viewController,获取索引,并获取按钮的标签以知道单击了哪个按钮,标签可以轻松地设置为0、1、2,具体取决于您单元格中有多少个按钮/动作。 […]

通用表视图控制器

嘿伙计! 今天我们将讨论通用的东西,看看上面的图片。 你看到了什么? 提供一些屏幕的简单iOS应用程序导航流程。 他们有什么共同点? 乍一看,我们可以观察到基于TableViewController构建的四个屏幕,对吗? 你同意吗? 可能最直观的方法是构建五个视图控制器来完成此应用程序,但我想分享一种方法,我们将仅使用两个方法。 一个用于所有列表屏幕中使用的通用表视图控制器,另一个用于显示未找到的屏幕,第二个视图控制器的构建只是为了证明您可以将另一种视图控制器与我们将要展示的概念集成在一起的概念。这里。 在本文的最后获得GitHub上的完整代码。 有什么变化? 如果您看一看,确实会注意到这些表格视图屏幕中的单元格正在发生变化。 因此,我们可以将表视图作为通用组件重用,并自定义所需的任何单元格。 为了使用故事板实现此目标,我认为这很困难,我不会说不可能,但是我花了很多时间,而且我也找不到一个优雅的解决方案,这主要是因为我们必须告知通用类型,并告知通用视图控制器和方法情节提要实例化不利于此。 因此这是一个复杂的主题,当然也有优点和缺点,如果您想了解更多信息,我在下面的链接中写了一篇关于该主题的文章: 什么? 以编程方式进行布局? 你疯了吗? 我为什么要这样做? 当我第一次听它时,我承认这听起来很奇怪。 一个聪明的同事向我和我建议了… medium.com 因此,为了实现此目标,我使用了程序化的视图控制器,请看以下内容: 上面的代码具有执行表视图控制器表示所需的全部内容,并且具有(cellForAt)方法,numberOfRowsInSection和didSelectRowAt方法已实现。 注意构造函数推断出的通用类型,该通用类型有一个约束,并且它必须符合协议DescriptiveProtocol才能为(cellForAt)方法中的每个项目提供绑定UITableViewCell的方法。 因此,以这种方式,数据源中的每个元素都必须告知必须通过表视图中的可重用出队方法返回哪种单元格类型。 这是窍门,通用表视图对单元格一无所知,因此可以将其用于所有单元格。 描述符对象负责保存单元格类型,重用标识符和配置单元格必须调用的闭包。 如您所见,此结构符合DescriptiveProtocol,并且具有称为描述符的属性,如上所述,它有责任将其绑定到UIViewTableCell专业化,这时将在调用表视图cellForAt方法时通知单元格类型。 其余代码是不言自明的,我认为这不是灵丹妙药,但是可以在某些特定情况下帮助某人,如果您有话要说,请随时发表评论。 再见,下次见。 heuristisk / hkImperatorMensa hkImperatorMensa –通用表视图控制器 github.com

Tableview粘页眉

让我们谈谈有关iOS开发的一些技巧。 我将向您展示如何构建粘性标头视图。 在开始阅读之前,请先在此处打开GitHub项目。 您需要一些代码以粘贴到您的项目中。 写完后,它将像… 1-创建粘性标题视图 您需要创建2个类,分别为StickyHeader和StickyHeaderView。 这些是为我们提供初始化粘性标头组件的基类。 2-添加UIScrollView扩展 我们需要添加扩展功能来管理tableview滚动。 这些课程已准备就绪。 接下来是调用粘性标题并将其标题视图分配给它。

如何在iOS中快速流畅地进行表格滚动

表格视图是否以60 fps(每秒帧数)滚动? 还是看起来生涩而不光滑? 我的现在以60 fps的速度平稳运行。 它曾经不稳定,平均速度约为38 fps。 这就是我做的。 每行中具有复杂单元格的表可能难以平滑滚动。 您需要在滚动时配置和布局单元,这是有限的时间。 当需要看时,滚动会变得缓慢而生涩。 我的平均速度约为38 fps(尽管分布范围很广)。 显然很慢。 问题在于表单元格是一个自定义视图,其中包含其他自定义视图,并且这些视图的位置和大小受到各种限制。 看起来非常不错,这是一个很棒的UI。 但是,当我们的表视图控制器代表被要求提供行高时,很难很快地弄清这一点。 问题 在我们的应用程序中,表格单元格的大小可能会因数据而异,几乎相差2倍! 因此,我们在调用heightForRowAtIndexPath方法时配置并布局一次单元,然后在调用cellForRowAtIndexPath方法时再次进行所有操作。 我们本可以使用estimatedHeightForRowAtIndexPath方法。 但是对我们来说,如果不进行完整的布局很难估算。 另一位开发人员希望表格准确无误。 因此,他们只是设置单元格视图并在其上进行布局,然后询问该单元格视图的高度。 那行得通,而且是准确的。 但是非常慢。 为什么我要关心的是38 fps,而不是60? 应用程序的响应性在快速动作的工作方式(如滚动等快速动作)中非常明显。 如果滚动是平滑的,则用户可以快速流畅地查看应用程序。 而且以平均38 fps的速度不规律地滚动时,会显得生涩且不流畅。 60 fps的速度与屏幕更新的速度一样快,因此必须每16毫秒更新一次(实际上由于系统和图形开销而要少)。 我在委托中的heightForRowAtIndexPath和cellForRowAtIndexPath方法上设置了一个断点,并看到多次调用该断点。 这段代码每次都在重做单元格布局。 有趣的是,我看到在heightForRowAtIndexPath.之前叫做cellForRowAtIndexPath heightForRowAtIndexPath. 与我预期的相反,但这有所帮助。 第一次尝试 我试图简化该过程,并根据行的元素和潜在的配置来计算高度。 这演变成一系列让我不安的特殊情况。 这很复杂,无法支持。 这意味着更改单元格不仅仅是更改xib文件的问题,而是再次对布局计算重新进行反向工程以估计或计算高度。 我不喜欢为要维护代码的人添加地雷。 (可能是我!)这行不通。 真正的解决方案: 因此,我回到了“布局并询问高度”方法。 但是这一次,我将在单元格上进行布局时缓存高度。 我创建了一个像这样的类: @interface MyCachedRowHeight : NSObject @property […]

Parse.com发送新数据的自动推送通知

我有一个从parsing数据同步的应用程序。 我有一个class级和对象。 当我添加新的数据(行)我需要parsing发送自动推送通知到所有设备的应用程序安装。 我尝试阅读文档,但不能,但可以弄清楚如何做到这一点。 任何帮助?

使用相同数组的不同索引处的对象填充CollectionView和TableView

我想在CollectionView中显示“group_type”== 1的产品,在TableView中显示“group_type”== 2的产品。 我想填充TableView的顺序,其中“group_title”将作为行的数组“产品”中的节标题和产品。 以下是我的JSON。 我需要什么Swift代码? "product_groups": [ { "group_title": "Recommended", "group_type": 1, "products": [ { "product_id": 1, "product_name": "Product 1", "product_price": "Rs 1,999/-", "product_category": "Equipment & Chairs", "product_image": "https://project-isdental-cammy92.c9users.io/api/images/products/product_1.jpg", "product_description": "Description 1" }, { "product_id": 2, "product_name": "Product 2", "product_price": "Rs 1,999/-", "product_category": "Equipment & Chairs", "product_image": "https://project-isdental-cammy92.c9users.io/api/images/products/product_1.jpg", "product_description": "Description 1" }, { "product_id": […]

TableView添加一个自动更改的新标签

好吧,最近我帮助Darren解决了我的tableview数据没有显示的问题。 我将在这里留下一份我将要讨论的文件。 下载文件(3.12mb) 在故事板中,最后有3个对象,其中2个自动更改,取决于tableView上select的项目。 我想添加另一个标签(在项目中已经做过),然后根据在表格视图中select的项目,在这里显示一些信息。 就像其他2。 我怎样才能做到这一点? 对于那些不信任下载文件的人,我得到了一些可能有帮助的代码。我想在带有标签#3的标签中显示“myData2”。 我怎样才能做到这一点? – (void)viewDidLoad { [super viewDidLoad]; // Define our test data myData = [NSMutableArray arrayWithObjects: @"Chasing Amy", @"Mallrats", @"Dogma", @"Clerks", @"Jay & Silent Bob Strike Back", @"Red State", @"Cop Out", @"Jersey Girl", nil]; //test for 2nd data myData2 = [NSMutableArray arrayWithObjects: @"Info for Chasing Amy item", @"Info […]

如何在tableview中select一个button?

我可以使用Swift 3的tableview中的“didSelectRowAt”函数来select行。但是,当我select连续的button时,如何执行其他操作? 我不知道如何在tableview中select一个button。

numberOfRowsInSection / 3 – 只返回15个图像,而不是16或17,因为它们不能被3整除

我正在查询图像parsing显示在我的tableViewCell里面有3个imageView。 所以,如果我有15个图像,我会得到5个TableView行,所有的图像将正确显示。 但是,如果我有16或17图像,这不是3的倍数的图像不显示,这是非常合乎逻辑的,因为我已经添加了我的查询计数除以3.但我已经推荐一个方法由另一个非常有用的用户在这里@Wottle应该解决这个问题,但它似乎并没有正常工作! 下面是我的代码,希望有人能帮助我! 我很感激你的时间。 这个function应该让我可以看到图像,即使他们是3的倍数。 func roundUp(value: Double) -> Int { if value == Double(Int(value)) { return Int(value) } else if value < 0 { return Int(value) } else { return Int(value) + 1 } } func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return roundUp( Double(imageArray.count / 3) ) } 这里是我的cellForRowAtIndexPath: func […]