首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如果单元格被点击则显示按钮,离开后在UITableView中隐藏

在iOS开发中,如果想要实现当单元格被点击时显示按钮,离开后隐藏按钮的效果,可以通过以下步骤来实现:

  1. 首先,在UITableViewDelegate协议的方法tableView(_:didSelectRowAt:)中获取被点击的单元格,并记录下该单元格的索引或标识。
  2. 在UITableViewCell的子类中,添加一个按钮作为子视图,并设置其初始状态为隐藏。
  3. 在UITableViewCell的子类中,重写layoutSubviews()方法,在该方法中根据按钮的显示状态来调整其他视图的布局。
  4. 在UITableViewDelegate协议的方法tableView(_:willDisplay:forRowAt:)中根据记录的索引或标识来判断是否需要显示按钮,并更新按钮的显示状态。

下面是一个示例代码:

代码语言:txt
复制
import UIKit

class CustomTableViewCell: UITableViewCell {
    let button = UIButton(type: .system)
    
    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        
        // 设置按钮的属性
        button.setTitle("按钮", for: .normal)
        button.frame = CGRect(x: 0, y: 0, width: 60, height: 30)
        button.isHidden = true
        
        // 将按钮添加到单元格中
        addSubview(button)
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        
        // 根据按钮的显示状态来调整其他视图的布局
        if button.isHidden {
            // 隐藏按钮时的布局
        } else {
            // 显示按钮时的布局
        }
    }
}

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    let tableView = UITableView()
    var selectedIndexPath: IndexPath?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // 设置UITableView的属性
        tableView.delegate = self
        tableView.dataSource = self
        tableView.frame = view.bounds
        view.addSubview(tableView)
    }
    
    // UITableViewDelegate协议方法:单元格被点击时调用
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        // 记录被点击的单元格的索引
        selectedIndexPath = indexPath
        
        // 刷新被点击的单元格
        tableView.reloadRows(at: [indexPath], with: .none)
    }
    
    // UITableViewDelegate协议方法:单元格将要显示时调用
    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        // 判断是否需要显示按钮
        if indexPath == selectedIndexPath {
            // 显示按钮
            if let customCell = cell as? CustomTableViewCell {
                customCell.button.isHidden = false
            }
        } else {
            // 隐藏按钮
            if let customCell = cell as? CustomTableViewCell {
                customCell.button.isHidden = true
            }
        }
    }
    
    // UITableViewDataSource协议方法:返回单元格数量
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 10
    }
    
    // UITableViewDataSource协议方法:返回单元格
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = CustomTableViewCell(style: .default, reuseIdentifier: nil)
        
        // 配置单元格的其他内容
        
        return cell
    }
}

在上述示例代码中,我们创建了一个自定义的UITableViewCell子类CustomTableViewCell,其中包含一个按钮作为子视图。在UITableViewDelegate协议的方法中,我们记录了被点击的单元格的索引,并在单元格将要显示时根据索引来判断是否需要显示按钮。在CustomTableViewCell的layoutSubviews()方法中,我们根据按钮的显示状态来调整其他视图的布局。

这样,当单元格被点击时,按钮会显示出来,离开后按钮会隐藏起来。你可以根据实际需求来调整按钮的样式和布局。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

底牌项目中上传牌谱功能之编辑标准模式

在编辑标准模式下如果用户没有编辑某个条目那么预览不能显示该条目,如果用户隐藏了某个条目,同样预览不能显示。...先说预览页面,思路和自定义编辑牌谱相似,将编辑页面编辑的信息传递过来然后进行页面的布局,点击完成按钮的时候生成图片,同时进行图片的上传。...(显示隐藏按钮)....如果没有编辑内容那么某个text字符串就是nil,nil是不能添加到数组的,这是需要将为nil的字符串设置为@“”。预览页面,如果数组某个元素内容为@“”那么就不显示该内容。...情况3:如果某个有内容的条目隐藏了则在预览页面不显示此条目。

84130

iOS:分割控制器UISplitViewcontroller

分割控制器UISplitViewController 功能:它也是ipad的一个新特性,屏幕上可以同时显示两个控制器,左边一个,右边一个;左边的为主控制器,右边的为详细控制器,主控制器可以根据需要显示隐藏...master时,detail控制器的toolbar上设置并显示一个按钮 barButtonItem.title = @“Master”; [detailViewController...2、导入几张素材图片,用来详细控制器显示。...*cell = [self.tableView dequeueReusableCellWithIdentifier:reuseIdentifier]; //2.如果没有找到,自己创建单元格对象...:[UIColor whiteColor]]; } 演示结果如下: 开始时: 点击Master,显示Master主控制器: 点击单元格时,Detail详细控制器显示的内容: 点击屏幕,关闭Master

1.9K30

Swift - 给TableView添加编辑功能(删除,插入)

1,下面的样例是给表格UITableView添加编辑功能: (1)给表格添加长按功能,长按表格进入编辑状态 (2)在编辑状态下,第一个分组处于删除状态,第二个分组处于插入状态 (3)点击删除图标...,删除对应条目 (4)点击添加图标,插入一条新数据 ?...{ return "确认删除" } // 单元格编辑的响应方法 func tableView(_ tableView: UITableView, commit editingStyle:...(2)长按表格进入编辑状态,所有单元格都可以进行删除操作。 (3)同时在编辑状态下,在下方会自动出现一个新增操作单元格点击前面的加号,便会给数据集中添加一条新数据。 ?...{ return "确认删除" } // 单元格编辑的响应方法 func tableView(_ tableView: UITableView, commit editingStyle:

3K20

iOS页面间传递消息之Delegate

当我们要设置点击列表行的相应时,就要用到UITableView Delegate的方法,这里要讲的,跟这个是同一个东西。 先看一个效果: 主界面有一个按钮和一个方块,方块原本是隐藏的。...这个协议由子界面定下规矩,比如点击显示方块的按钮会如何,点击隐藏按钮又会如何。任何界面都可以声明我要遵循子界面的这个协议。...定下规矩名,我们要在点击按钮的时候去使用规矩,所以.m文件: // 显示方块 - (void)showSquare { [self.delegate showTheSquare];// 调用委托方法...> 这里的协议名就是我们子界面声明协议时定下的名字,还记得吧,这个协议我们定下了两个方法,分别表示显示隐藏方块。...我们之前已经子界面设置了,点击两个按钮会调用那两个方法,但是这两个方法具体要做什么,确实在主界面设置的。

71530

iOS 9 Storyboard 教程(二下)

当你关闭 Add Player控制器,也点击了Cancel和Done按钮的时候,你应该会看到deinit里print()方法输出地状态信息.如果你再一次打开了这个控制器,你应该也会再一次看到从init?...现在让我们给这个新的控制器一些数据来显示吧.GamePickerViewController.swift,把一个具有硬编码值的games字符串数组添加到顶部: var games:[String]...就数据源而言应该那样做.运行app然后点击Game行.新的Choose Game控制器将会滑出来.然而点击这些行不会做任何事,那是因为这个控制器是导航堆栈上弹出来的.但是你却总可以点击返回按钮返回到...这个方法点击之后就会取消选中.那使得它从灰色高亮褪色为正常的白色.然后它就会从先前选中的单元格移除对号标记,然后把对号放到刚刚点击的那一行上....现在运行app测试一下吧.点击一个游戏的名称,那一行就会显示一个对号.点击另一个游戏的名称,标记就会随至移动到那一行. ?

2.2K10

底牌项目中的选择牌谱上传功能--深刻理解UITableView复用

此界面的布局: 此界面由UITableView构成,根据日期的不同设置单元格单元格内是一张张图片,每张图片上添加了一个按钮用于选择图片。...问题: 选中一张图片后会将该图片存储到一个数组以便上传,可当再次点击按钮取消选中图片时却不知道该如何将该图片从数组删除。...解决: Cell制定协议设置代理,选中图片的按钮点击事件如果代理响应了协议的方法则让代理执行该方法。关键:该方法要将图片的信息传递过去。...解决办法:点击图片上的按钮同样执行协议的方法,也就是上面贴出来的方法。...解决: 思路:每次使用单元格的时候将选中的图片和单元格的图片进行比较,如果有相同的图片,则将相同图片上的按钮设置为选中状态。

1.1K10

iOS开发常用之网络

ExpandingStackCells - 采用UIStackView实现表格单元格扩展内容显示示例及解决方案。...QuickRearrangeTableView - 基于UITableView的快速重排功能扩展子类。通过长按选定单元格然后滚动移动到指定位置。...TabBarController,支持自定义TabBarItem样式或添加动画 隐藏显示 SlideTapBar - 滚动栏菜单,向上滚动时隐藏tabbar,向下滚动马上显示tabbar。...WZFlashButton - WZFlashButton,点击按钮里面出现水波扩散效果。 Twinkle - 为字体加上钻石版闪耀的效果。使用Swift编写。...XTLoopScroll - 用两个timer三个重用的视图实现无限循环scrollView,1自动轮播2点击监听回调当前图片3手动滑动重新计算轮播的开始时间,良好的用户体验。

23.6K10

【IOS开发基础系列】Storyboard专题

具体实现方法:          例如,故事板Level1VC添加一个按钮,然后将level2VC拖入故事板,按住cmd键,鼠标点击按钮并拖入level2VC,弹出的菜单中选择show事件,即完成了从...文档树这些关系显示如图中所示:         注意 TableViewController 上加入了一个navigationBar。...故事板默认使用“Inferred”(依靠推断)设置,意思是该场景如果在NavigationController显示则会显示导航条,如果在 TabBarController 显示则会显示TabBar,...以前,如果你要定制表视图单元格,你要么代码向cell对象添加自己的 subviews ,要么新建一个 nib 然后从nib 中加载你自己的 cell。...但我想在单元格右边加一张图片以显示玩家级别(以星级的形式)。UITableViewCell的标准样式不包含可以单元格中放入一个ImageView,因此我只能选择定制设计。

98030

DTCoreText的集成与使用目录一、相关资源二、DTCoreText的集成三、DTCoreText的使用四、可能遇到的错误五、参考链接

但是如果我们的Html字符串里图片链接没有包含大小,图片并不能正常显示。...//DTCoretText解析Html的时候,如果遇到网络图片会插入一个占位符 //对于图片类型(DTImageTextAttachmentd)的占位符,我们使用DTLazyImageView来显示...//frame:超链接字符串所在的位置,需要将自定义响应按钮设置为此Frame return nil; } 注意:如果我们需要显示一些输入框之类的视图,也可以借助此方法。...3.DTAttributedTextCell 如果我们需要在单元格显示富文本,DTCoretText也为我们提供了特有的类来解决这个问题,那就是DTAttributedTextCell。...,就手动刷新当前屏幕显示单元格 NSArray *indexPaths = [self.tableView indexPathsForVisibleRows]; if(indexPaths

4.8K90

iOS开发——UITableView勾选效果

如今的APP开发UITableView是最常用的控件之一,而UITableView中有个很常见的效果就是勾选效果,这个效果是由UITableViewCell的accessoryType属性来决定的...indexPath``` 方法实现判断被选中的单元格的功能。...记录下之前选择的单元格,并且实时更新。 - 其次,解决单元格的复用问题。不然当单元格复用时,会显示多个勾选的BUG。看了一下网上分享的很多的方法,都没有解决单元格复用的问题,或者问的很笼统。...首先我们先声明一个变量,用来存储被选择的行数的标志 @property (nonatomic, strong) NSIndexPath *selectPath; //存放点击的哪一行的标志 之后我们实现...selectPath = [indexPath copy]; } [tableView deselectRowAtIndexPath:indexPath animated:YES]; } 最后看一下怎么`

1.6K30

Excel表格的35招必学秘技

3.调整好行高和列宽,同时选中A1至G2单元格区域(第1位学生的成绩条区域),按“格式”工具栏“边框”右侧的下拉按钮随后出现的边框列表,选中“所有框线”选项,为选中的区域添加边框(如果不需要边框...②如果需要画出不同颜色的边框,可以先按工具栏右侧的“线条颜色”按钮随后弹出的调色板中选中需要的颜色,再画边框即可。③这一功能还可以单元格画上对角的斜线。...当然,为了使欧元的显示更显专业,我们还可以点击Excel工具栏上的“欧元”按钮,这样所有转换的货币数值都是欧元的样式了。...而在A8到A13的单元格我们建立了一个“函数查询”区域。我们的设想是,当我们“输入学生姓名”右边的单元格,也就是C8格输入任何一个同学的名字后,其下方的单元格中就会自动显示出该学生的各科成绩。...以后,只要我们双击“监视窗口”的该条目,监视的单元格就会不请自来了。   提示:当包含有指向其他工作簿的单元格监视时,只有当所有引用的工作簿都打开时,才能在“监视窗口”的列表显示出来。

7.5K80

自学Swift之路(二)UITableView自定义和实际利用

6EDD4AC9-47E3-401F-91A4-2DA836439787.png Demo开始之前,我们想想应该会使用到屏幕宽高等一些常用的值,OC,咱们可以使用PCH然后宏定义,然而在Swift...// 登录按钮 let loginBtn = UIButton(type: .Custom) loginBtn.frame = CGRectMake(25,...self.presentViewController(buildListNVC, animated: true, completion: nil) } } 登录我们会进入一个表视图...coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } } 代码自定义的单元格加上了一个...ImageView和一个Label,虽然数据是死的,但是Swift,另外一个类是可以直接访问另一个类的变量的(如果没做任何保护的话),所以我们配置cell的时候是可以直接赋值的,这里就不弄了,然后我们看创建表视图那一块

2.3K90

自学Swift之路(一)UI入手之基本控件

我们会进入这个界面 C18EA84A-89AF-4920-8824-1CF1F2CA8B8C.png 好了开始编程:写一个创建子视图的方法,里面创建一些基本的UI控件,然后viewDidLoad调用...myBtn.setBackgroundImage(UIImage(named: "查公共设施"), forState: .Normal) myBtn.setTitle("点击按钮...} 当然,别的方法也是一样,如点击单元格: func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath...) { print("点击单元格") } 好了,这篇文章的内容就到这里了,下一篇文章将会围绕UITableView,自定义UITableViewCell来写点可视化内容较强的东西...本人也是正在学习,文章内容如有错误,还请指正,有需要优化的地方,也请帮忙指出,帮助大家共同进步

2.9K110

解决UITableViewCell重用机制导致内容出错的方法总结

上面主要是一个个的UITableViewCell,可以让UITableViewCell响应一些点击事件,也可以UITableViewCell中加入UITextField或者UITextView等子视图...,使得可以cell上进行文字编辑。...UITableView的cell可以有很多,一般会通过重用cell来达到节省内存的目 的:通过为每个cell指定一个重用标识符(reuseIdentifier),即指定了单元格的种类,当cell滚出屏幕时...,会将滚出屏幕的单元格放入 重用的queue,当某个未在屏幕上的单元格显示的时候,就从这个queue取出单元格进行重用。...比如,当一个cell含有一个 UITextField的子类并放在重用queue以待重用,这时如果一个未包含任何子视图的cell要显示屏幕上,就会取出并使用这个重用的 cell显示无任何子视图的cell

2.4K50

【iOS7一些总结】9、与列表显示):列表显示UITableView

列表显示,顾名思义它是一个列表视图的形式显示屏幕上的数据的内容。于ios列表视图UITableView达到。这个类实际应用中频繁,是很easy理解。...UITableView定义头文件UITableView.h,详细的定义能够查看官方文档;从定义能够看出,UITableView继承自UIScrollView类,因此支持方便地显示列表数据的同一时候...详细的使用过程,能够创建一个独立的UITableView,也能够直接创建一个UITableViewController。...创建完毕,将tableView的delegate和dataSource设置为self,即托付给当前视图控制器来控制表视图的数据显示和响应。...方法,首先会检查是否有闲置的单元格,假设没有闲置的单元格

1.9K40

《iOS Human Interface Guidelines》——Table View表视图

简单风格,行可以分到有标题的章节,并且视图的右边界可以显示一个可选的垂直索引。章节的第一个条目之前可以显示页眉,最后一个条目之后可以显示页脚。 分组风格。...两种风格,表行会在用户点击选中时简短地高亮。如果一行的选择导致导航到一个新的界面,选中的行会高亮并且伴随着新的界面滑动进来。...使用简单或分组表视图来显示用户点击表中一行条目时的选项清单。使用简单表视图来显示用户点击一个按钮或其他不在表的行的UI元素时的选项清单。 显示层级信息。简单表风格很适合显示层级信息。...用户期待当他们点击列表条目时表的行能简短地高亮一下。点击之后,用户期待一个新视图的出现(或者行显示一个勾选符号)来表示条目被选中了。 如果表内容是冗长的或复杂的,不要等到所有数据都获取之后再显示。...显示表右边界的表视图元素——比如扩展指示器——会干扰到索引。 如果你想要用非标准的方式布局你的表单元格,创建自定义的单元格风格。创建自定义的表单元格风格会比标准的要更好。

2.4K20
领券