Swift:使用 tableView DidSelect 方法更改单元格的 UIButton 图像

     2023-03-04     200

关键词:

【中文标题】Swift:使用 tableView DidSelect 方法更改单元格的 UIButton 图像【英文标题】:Swift: Change the cell's UIButton Image With tableView DidSelect method 【发布时间】:2019-01-22 05:20:13 【问题描述】:

我有TableView,在Tableview 中有两个标签和一个UIButton。所以在DidSelect 方法上,我想更改那个特定单元格的UIButton 图像。作为附加图片。

【问题讨论】:

显示你的代码,你尝试什么? 您想将按钮的图像显示为选中状态吗? 请详细说明您的要求。 完全正确.. @JarvisTheAvenger @KrunalNagvadia 你想显示选中的单选按钮吗?? 【参考方案1】:

检查一下

import UIKit

class ButtonTblViewController: UIViewController,UITableViewDelegate, UITableViewDataSource 

    var arry = ["Montitanki Chowk","Greenland Chokdi"]
    var SelectData = [NSMutableDictionary]()

    @IBOutlet weak var tbleVw: UITableView!

    override func viewDidLoad() 
        super.viewDidLoad()

        for i in 0..<arry.count
        
            self.SelectData.append(["data":arry[i],"isSelect":"NO"])
        

        self.tbleVw.reloadData()
        // Do any additional setup after loading the view.
    

    // MARK - tableView Delegates

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return SelectData.count
    

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
        let cell:listTble = tableView.dequeueReusableCell(withIdentifier: "CellID", for: indexPath as IndexPath) as! listTble
        cell.lblTit.text =  self.SelectData[indexPath.row].value(forKey: "data") as? String

        cell.btnRdo.tag = indexPath.row
        let tapgesture = UITapGestureRecognizer(target: self , action: #selector(self.sectionTapped(_:)))
        cell.btnRdo.addGestureRecognizer(tapgesture)

        let selData = self.SelectData[indexPath.row].value(forKey: "isSelect") as! NSString

        if selData == "NO" 
            cell.btnRdo.setImage( UIImage(named: "btnUnSel"), for: .normal)
         else 
            cell.btnRdo.setImage( UIImage(named: "btnSel"), for: .normal)
        

        return cell
    

    @objc func sectionTapped(_ sender: UITapGestureRecognizer)
        if(self.SelectData[(sender.view?.tag)!].value(forKey: "isSelect") as! String == "NO")
            self.SelectData[(sender.view?.tag)!].setValue("YES", forKey: "isSelect")
        else
            self.SelectData[(sender.view?.tag)!].setValue("NO", forKey: "isSelect")
        
        self.tbleVw.reloadData()
    

    /*
     // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
        // Get the new view controller using segue.destination.
        // Pass the selected object to the new view controller.
    
    */



class listTble: UITableViewCell 
    @IBOutlet weak var lblTit: UILabel!
    @IBOutlet weak var btnRdo: UIButton!

输出

【讨论】:

【参考方案2】:

你需要先在cellForRow方法中设置按钮标签

didSelectRowAtIndexPath 方法之后,您需要设置按钮的图像,在didDeselectRowAtIndexPath 中设置按钮中的取消选择图像。

您可以使用以下方法设置按钮图像:

playButton.setImage(UIImage(named: "play.png"), forState:UIControlState.Normal)

【讨论】:

【参考方案3】:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 

        guard let btn = (tableView.cellForItem(at: indexPath) as! yourCellName).button else 
            return
        
        btn.setImage(UIImage(named: "yourSelectedImage name"), for: .normal)
    
    func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) 
        guard let btn = (tableView.cellForItem(at: indexPath) as! yourCellName).button else 
            return
        
        btn.setImage(UIImage(named: "yourNotSelectedImagename"), for: .normal)
    

【讨论】:

我想知道您为什么要对这个答案投反对票吗?它对我来说很好。 我认为这是最好的方法。无需检查任何变量。 你的代码的问题是当用户滚动你的选择时会消失。 我们可以通过cellForRowAt 中的标志来避免这个滚动问题

使用 Swift 4 使用 fetchedResultsController 重新排序 TableView

】使用Swift4使用fetchedResultsController重新排序TableView【英文标题】:ReorderTableViewusingfetchedResultsControllerusingSwift4【发布时间】:2018-01-2617:12:30【问题描述】:我想要做的是重新排序我的tableview单元格。我的tableview有几个部分:数据... 查看详情

Swift-使用委托在 tableView 上显示

】Swift-使用委托在tableView上显示【英文标题】:Swift-UsingDelegationtodisplayontableView【发布时间】:2020-02-1410:04:19【问题描述】:在尝试学习在Swift中使用委托。问题是我使用委托将字符串值(从pickCourse()到ViewController())附加到sampleA... 查看详情

Swift:使用界面生成器创建 tableView

】Swift:使用界面生成器创建tableView【英文标题】:Swift:createtableViewusinginterfacebuilder【发布时间】:2014-06-1111:18:10【问题描述】:我正在尝试在我的应用程序中实现一个tableView,虽然这对objective-c没有问题,但我不知道如何在Swift... 查看详情

在 Swift 中使用数组创建 TableView

】在Swift中使用数组创建TableView【英文标题】:CreatingTableViewsinSwiftwithanArray【发布时间】:2015-06-1813:25:28【问题描述】:我正在尝试使用一次Rest调用的结果作为我的TableView的输入。我有一个名为GamesList[String]的数组,它是在viewDid... 查看详情

使用 swift 在 tableviewcell 内创建 tableview

】使用swift在tableviewcell内创建tableview【英文标题】:createtableviewinsidetableviewcellusingswift【发布时间】:2016-03-0719:35:15【问题描述】:我用xib文件创建tableview并在其中创建tableview单元格现在我想在xib文件中创建tableview,主要问题是... 查看详情

TableView 使用 Swift 3 展开/折叠

】TableView使用Swift3展开/折叠【英文标题】:TableViewExpand/CollapsewithSwift3【发布时间】:2017-04-0408:32:29【问题描述】:我确实在swift3中折叠/展开表格单元格。但是,我想在标题标题中添加一些填充底部。在我的屏幕截图中,标题1... 查看详情

Swift:使用 StoryBoard 在 Tableview 上浮动加号按钮

】Swift:使用StoryBoard在Tableview上浮动加号按钮【英文标题】:Swift:FloatingPlusbuttonoverTableviewusingTheStoryBoard【发布时间】:2015-07-3013:46:19【问题描述】:如何使用情节提要添加浮动按钮作为Facebook的应用房间?我无法在tableview上拖动... 查看详情

Swift 超出范围.... 使用 tableView[indexPath]

】Swift超出范围....使用tableView[indexPath]【英文标题】:Swiftoutofrange....withtableView[indexPath]【发布时间】:2017-07-1407:43:53【问题描述】:我遇到了range错误...错误发生在cell.creditLabel.text=numOfDays[(indexPathasNSIndexPath).row]+"days"。如... 查看详情

使用 swift 向 tableview 单元格添加约束

】使用swift向tableview单元格添加约束【英文标题】:Addingconstraintstotableviewcellwithswift【发布时间】:2016-12-0220:37:44【问题描述】:我正在尝试使用swift添加约束。正如您在屏幕截图中看到的,我必须将图像放入蓝色气泡框内。我用... 查看详情

使用 Swift 在 TableView 中显示 JSON 数据

】使用Swift在TableView中显示JSON数据【英文标题】:ShowJSONdatainaTableViewwithSwift【发布时间】:2015-12-0110:19:10【问题描述】:我正在尝试将我从数据库中获取的一些数据显示到TableView中,但这些数据未显示在TableView中。我收到的数据... 查看详情

如何使用 Swift 从 tableview 和 sqlite3 中删除

】如何使用Swift从tableview和sqlite3中删除【英文标题】:Howtodeletefromtableviewaswellassqlite3usingSwift【发布时间】:2019-03-3008:47:50【问题描述】:我是swift和sqlite3的新手,我需要有关如何从tableview和sqldb中删除的帮助。我尝试使用reloadDat... 查看详情

TableViews 不能与 TabBarController Swift 一起使用

】TableViews不能与TabBarControllerSwift一起使用【英文标题】:TableViewsnotworkingwithTabBarControllerSwift【发布时间】:2019-05-2512:22:21【问题描述】:我有一个带有tableView的应用程序。我决定用其他tableViews添加更多屏幕,所以我以编程方式... 查看详情

如何在 Swift 中使用 MagicalRecord CoreData 删除 tableview 中的记录

】如何在Swift中使用MagicalRecordCoreData删除tableview中的记录【英文标题】:HowtodeletearecordintableviewwithMagicalRecordCoreDatainSwift【发布时间】:2015-03-1519:13:33【问题描述】:我是Swift的新手,如何使用Swift在CoreData中使用MagicalRecord删除一... 查看详情

Swift 使用数组修改 Tableviews

】Swift使用数组修改Tableviews【英文标题】:SwiftModifyingTableviewswitharrays【发布时间】:2018-08-1914:30:49【问题描述】:您好,我的个人项目快完成了,但是当我尝试使用数组修改表格视图时遇到了问题。这是我正在使用的功能;它... 查看详情

Swift 2:使用两个 CoreData 实体填充 TableView

】Swift2:使用两个CoreData实体填充TableView【英文标题】:Swift2:PopulatingaTableViewwithtwoCoreDataentities【发布时间】:2017-02-2306:32:55【问题描述】:这是我在网站上提出的第二个问题,因此我们非常感谢有关问题格式的任何反馈。话虽... 查看详情

Swift 3. 使用 Core Data 隐藏一个空的 tableView

】Swift3.使用CoreData隐藏一个空的tableView【英文标题】:Swift3.HidinganemptytableViewusingCoreData【发布时间】:2016-08-1902:14:51【问题描述】:我尝试使用viewDidAppear和viewDidLoad方法中的以下代码行来隐藏我的tableView:letcount=self.fetchedResultsCo... 查看详情

如何使用视图控制器重新加载 tableview (swift)

】如何使用视图控制器重新加载tableview(swift)【英文标题】:Howtoreloadtableviewusingviewcontroller(swift)【发布时间】:2015-10-2820:40:42【问题描述】:我对此很陌生。我花了几个小时来解决有关此主题的各种问题,但找不到适合我的问题... 查看详情

如何在 Swift 中使用两个 TableView 设计动态布局

】如何在Swift中使用两个TableView设计动态布局【英文标题】:HowtodesignadynamiclayoutwithtwoTableViewsinSwift【发布时间】:2019-03-0813:27:47【问题描述】:各位程序员们好。我花了很多时间尝试在Swift中设计这种布局,但收效甚微。Drawingoft... 查看详情