uitableview

UITableView with UIViewRepresentable in SwiftUI

不问归期 提交于 2020-03-03 07:44:07
问题 I am trying to use UITableView in a SwiftUI app struct UIList: UIViewRepresentable { var rows: [String] func makeUIView(context: Context) -> UITableView { let collectionView = UITableView(frame: .zero, style: .plain) collectionView.translatesAutoresizingMaskIntoConstraints = false collectionView.dataSource = context.coordinator collectionView.delegate = context.coordinator collectionView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell") return collectionView } func updateUIView(_

MovieTableViewTest

半腔热情 提交于 2020-03-02 19:28:14
// // ViewController.m // MovieTableViewTest // // Created by dc008 on 15/12/29. // Copyright © 2015 年 lin. All rights reserved. // #import "ViewController.h" #import "TableViewCell.h" #import <AVFoundation/AVFoundation.h> #import <MediaPlayer/MediaPlayer.h> @interface ViewController ()< UITableViewDataSource , UITableViewDelegate > { UITableView *_tableView; NSArray *_arrayName; UIImage *_image; UIButton *_backButton; NSMutableArray *arrayPic; UIImageView *imagePic; int i; } @property ( nonatomic , strong ) MPMoviePlayerController *moviePlayer; @end @implementation ViewController - ( void

UITableView的基本知识

血红的双手。 提交于 2020-03-02 19:28:00
一、UITableView的概念: UITableView 是iOS中最重要的控件,几乎所有的页面都可以用UITableView完成。 tableView的使用需要遵循代理和数据源,这也是一种非常棒的设计模式,数据源模式可以近似为代理模式。 tableview要引入2个代理UITableViewDelegate,UITableViewDataSource 二、UITableView的基本用法: 1、基本属性: (1)设置tableview的类型 UITableViewStylePlain 基本类型,分区头标题会悬浮 UITableViewStyleGrouped 分组的类型,分区头标题不会悬浮 //初始化: UITableView *tableView = [[UITableView alloc]initWithFrame:CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height) style:UITableViewStylePlain]; (2)设置背景: tableView.backgroundColor = [UIColor redColor]; (3)设置分割线: 类型:tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

解决UIScrollView中嵌入UITableVIew无法点击StatusBar滚动到顶部

被刻印的时光 ゝ 提交于 2020-03-02 18:42:56
平时在UIViewController中加入UITableView时,可以点击顶部的StatusBar滚动到顶部,但是当UITableView嵌入UIScrollView中后就不起作用了。 解决方法很简单:因为UIScrollView吸收了UITableView的scrollToTop事件,如果UIScrollView不需要处理这事件,可以设置 scrollsToTop为 NO,此问题则解决。 来源: oschina 链接: https://my.oschina.net/u/222120/blog/90040

UITableView 避免UITableViewCell重用方法

旧城冷巷雨未停 提交于 2020-03-02 18:40:58
问题来源:公司需求部分cell上面放定时器 主要是cell加载的时候因为重用池的问题而出现各种的bug,虽然程序没有崩掉,但是大大影响到我的心情,下面是最主要的一个问题 ,就是cell的重用问题, cell因为从重用池中调取,没有及时删除上面的内容而导致内容的各种出现, 这里有几个解决方案.UITableView中的cell可以有很多,一般会通过重用cell来达到节省内存的目的:通过为每个cell指定一个重用标识符(reuseIdentifier),即指定了单元格的种类,当cell滚出屏幕时,会将滚出屏幕的单元格放入重用的queue中,当某个未在屏幕上的单元格要显示的时候,就从这个queue中取出单元格进行重用。 cellForRowAtIndexPath:(NSIndexPath *)indexPath 通过为每个cell指定不同的重用标识符(reuseIdentifier)来解决。 删除重用cell的所有子视图,这个方法是通过删除重用的cell的所有子视图,从而得到一个没有特殊格式的cell,供其他cell重用。 代码展示(方法一) - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString

iOS中设计一个Block代码执行的UIAlertView

老子叫甜甜 提交于 2020-03-02 17:14:06
Windows下的AlertView(比如java的MessageBox, JS的alert('title'))都是阻塞代码继续执行的,举个例子 int result = window.confirm('你会点击取消按钮么?'); console.log("If I havn't confirm, I won't be logged."); if (result == 1) { // some code } iOS原生提供的UIAlertView就不能实现类似的效果,但是依旧可以自己Custom实现,本篇博客将介绍如何在iOS下实现类似windows这样的弹出框,如果不点击确认按钮则不执行后续的代码。 先简单介绍一下iOS中的UIAlertView:UIAlertView是以回调的形式通知调用方,调用完show方法之后,后续的代码可以继续执行,等AlertView处理完之后,会异步通知掉用方我刚才进行了什么操作。 在开始这篇文章之前,你需要准备一些知识(NSRunloop),很多博客有专门的介绍,为了避免重复的博客,在这里不做详细的介绍。如果你还没有了解,那么你得先去了解,可以直接Google NSRunloop 或者直接看官方文档 Threading Programming Guide: Run Loops ,或者如果你不想了解Runloop,如果你有需求

UITableView 添加长按手势UILongPressGestureRecognizer

我们两清 提交于 2020-03-02 02:16:34
给UITableView 添加长按手势,识别长按哪一行。 长按手势类UILongPressGestureRecognizer, 属性minimumPressDuration表示最短长按的时间 添加手势代码: UILongPressGestureRecognizer * longPressGr = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressToDo:)]; longPressGr.minimumPressDuration = 1.0; [self.tableView addGestureRecognizer:longPressGr]; [longPressGr release]; 响应长按事件代码: -(void)longPressToDo:(UILongPressGestureRecognizer *)gesture { if(gesture.state == UIGestureRecognizerStateBegan) { CGPoint point = [gesture locationInView:self.tableView]; NSIndexPath * indexPath = [self.tableView

iOS关于键盘弹出后tableview的滑动问题

江枫思渺然 提交于 2020-03-02 00:04:18
在键盘处理的过程中,最容易出现问题的就是,在键盘监听事件中,tableView的frame的修改,网上分享的大部分都是修改frame,这样会导致tableView的cell被遮挡,可能引起获取不到cell的indexPath,导致无法滚动到指定位置 还有一点就是UITableViewController的使用,如果直接使用UITableViewController,键盘弹出事件是不用我们开发者去处理的,UITableViewController自动帮我们实现了,也就是点击cell中的输入框,就可以直接弹出到可见区域,进行编辑。但UITableViewController的view是一个tableView,也就是说,你想在这个controller里加一个固定位置的view,是不可能的,这就牺牲了页面的可定制性 - (void)registerForKeyboardNotifications { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self

优化UITableViewCell高度计算的那些事

丶灬走出姿态 提交于 2020-03-01 03:39:51
我是前言 这篇文章是我和我们团队最近对 UITableViewCell 利用 AutoLayout 自动高度计算和 UITableView 滑动优化的一个总结。 我们也在维护一个开源的扩展,UITableView+FDTemplateLayoutCell,让高度计算这个事情变的前所未有的简单,也受到了很多星星的支持, github链接请戳我 这篇总结你可以读到: UITableView高度计算和估算的机制 不同iOS系统在高度计算上的差异 iOS8 self-sizing cell UITableView+FDTemplateLayoutCell如何用一句话解决高度问题 UITableView+FDTemplateLayoutCell中对RunLoop的使用技巧 UITableViewCell高度计算 rowHeight UITableView是我们再熟悉不过的视图了,它的 delegate 和 data source 回调不知写了多少次,也不免遇到 UITableViewCell 高度计算的事。UITableView 询问 cell 高度有两种方式。 一种是针对所有 Cell 具有固定高度的情况,通过: 1 self .tableView .rowHeight = 88 ; 上面的代码指定了一个所有 cell 都是 88 高度的 UITableView,对于定高需求的表格,

Auto Layout 使用心得(五)—— 根据文字、图片自动计算 UITableViewCell

爱⌒轻易说出口 提交于 2020-03-01 03:20:52
简介 本文中,我们将一起使用 Auto Layout 技术,让 UITableViewCell 的高度随其内部的 UILabel 和 UIImageView 的内容自动变化。 搭建界面 恢复之前删除的按钮 放置一个按钮,恢复到 firstTableViewController 的连接: 别忘了添加约束让他居中哦。 修改 firstTableViewCell 将 firstTableViewCell 的尺寸设置为 600 * 81,将 logo 的尺寸设置为 80 * 80。将 logo 的约束修改为如下图所示: 修改 label 的尺寸和位置,添加约束如下图: 给 ViewController 增加 UINavigationController 嵌套 为了便于返回。操作如下图: 查看结果 根据 label 自动计算 firstTableViewCell 高度 选中 label,设置 lines 行数为 0,表示不限长度自动折行: 修改 label 的文字内容让其超出一行: import UIKit class firstTableViewController: UITableViewController { var labelArray = Array<String>() // 用于存储 label 文字内容 override func viewDidLoad() { super