Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 要在单击同一UIButton时从UITableViewCell更改正确的UIButton图像吗_Ios_Swift_Uitableview_Uibutton - Fatal编程技术网

Ios 要在单击同一UIButton时从UITableViewCell更改正确的UIButton图像吗

Ios 要在单击同一UIButton时从UITableViewCell更改正确的UIButton图像吗,ios,swift,uitableview,uibutton,Ios,Swift,Uitableview,Uibutton,我在UITableViewCell中有UIButton。在UITableViewCell中单击UIButton时,多个UIButton图像正在更改。假设有10个UIButton显示,因为Json数据。接下来,我将单击UITableViewCell中的UIButton。因此,在UIButton 1、3、5、7、9中更改了图像。但它应该改变一个按钮的形象。请帮助我发布代码。我只想在单击UIButton时从UITableViewCell更改特定的UIButton图像 TableViewControll

我在UITableViewCell中有UIButton。在UITableViewCell中单击UIButton时,多个UIButton图像正在更改。假设有10个UIButton显示,因为Json数据。接下来,我将单击UITableViewCell中的UIButton。因此,在UIButton 1、3、5、7、9中更改了图像。但它应该改变一个按钮的形象。请帮助我发布代码。我只想在单击UIButton时从UITableViewCell更改特定的UIButton图像

TableViewController

import UIKit

class HomeViewController2: UIViewController, UITableViewDelegate,UITableViewDataSource {

    @IBOutlet weak var homeTableView: UITableView!

    let arrNewsList = [[Home]]()

    override func viewDidLoad() {
        super.viewDidLoad()

        self.homeTableView.delegate = self
        self.homeTableView.dataSource = self
    }

    func numberOfSections(in tableView: UITableView) -> Int {
        return arrNewsList.count
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return arrNewsList[section].count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "HomeTableViewCell2", for: indexPath) as! HomeTableViewCell2
        return cell
    }

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

    return self.view.frame.size.height

}
}
TableViewCell

class HomeTableViewCell2: UITableViewCell {

    @IBOutlet weak var bookMarkBtn: UIButton!

    override func awakeFromNib() {
        super.awakeFromNib()

    }

    @IBAction func bookMarkBtnClick(_ sender: Any) {

        guard let btnCheck = sender as? UIButton else {
            return
        }

        btnCheck.setImage(UIImage(named: "favorite_blue"), for: UIControlState.normal)
    }
}

不要在你的单元类中使用按钮操作,而是使用插座。并在cellForRowAt中为其添加操作

大概是这样的:

class HomeTableViewCell2: UITableViewCell {

    @IBOutlet weak var bookMarkBtn: UIButton!

     override func awakeFromNib() {
         super.awakeFromNib()

     }
 }
在cellForRowAt:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "HomeTableViewCell2", for: indexPath) as! HomeTableViewCell2

    cell.bookMarkBtn.tag = indexPath.row
    cell.bookMarkBtn.addTarget(self, action: #selector(bookMarkBtnClick(sender:)), for: .touchUpInside)

    return cell
}
仅在ViewController中设置此功能:

func bookMarkBtnClick(sender: UIButton) {
   sender.setImage(UIImage(named: "favorite_blue"), for: UIControlState.normal)

}

不要在你的单元类中使用按钮操作,而是使用插座。并在cellForRowAt中为其添加操作

大概是这样的:

class HomeTableViewCell2: UITableViewCell {

    @IBOutlet weak var bookMarkBtn: UIButton!

     override func awakeFromNib() {
         super.awakeFromNib()

     }
 }
在cellForRowAt:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "HomeTableViewCell2", for: indexPath) as! HomeTableViewCell2

    cell.bookMarkBtn.tag = indexPath.row
    cell.bookMarkBtn.addTarget(self, action: #selector(bookMarkBtnClick(sender:)), for: .touchUpInside)

    return cell
}
仅在ViewController中设置此功能:

func bookMarkBtnClick(sender: UIButton) {
   sender.setImage(UIImage(named: "favorite_blue"), for: UIControlState.normal)

}

这是一个问题,因为TableView单元格按钮正在重用内存

我曾经遇到过这样的问题,你能做的就是维护一个数组

采用与数组中用于显示表中项目的元素数相同的元素数

例如:

var arrayButton = [Int]
    for elements in mainArray {
       arrayButton.append(0)
    }
现在你的阵型准备好了

更改按钮状态时更改其值, 0=禁用 1:选中

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

  let cell = tableView.dequeueReusableCell(withIdentifier: "HomeTableViewCell2", for: indexPath) as! HomeTableViewCell2
  cell.bookMarkBtn.addTarget(self, action: #selector(bookMarkBtnClick(sender:)), for: .touchUpInside)

    if(arrayButton[indexPath.row] == 1) {
          cell.bookMarkBtn.setImage(UIImage(named: "set_selected_image"), for: UIControlState.normal)
       }
     else {
         cell.bookMarkBtn.setImage(UIImage(named: "set_unselected_image"), for: UIControlState.normal)
     }
     cell.bookMarkBtn.tag = indexPath.row
     return cell
  }




  func bookMarkBtnClick(sender: UIButton) {
        if(arrayButton[sender.tag] == 1){
            arrayButton[sender.tag] = 0
            sender.setImage(UIImage(named: "set_unselected_image"), for: UIControlState.normal)
         }
          else {
               arrayButton[sender.tag] = 1 
               sender.setImage(UIImage(named: "set_selected_image"), for: UIControlState.normal)
}
}

这是一个问题,因为TableView单元格按钮正在重用内存

我曾经遇到过这样的问题,你能做的就是维护一个数组

采用与数组中用于显示表中项目的元素数相同的元素数

例如:

var arrayButton = [Int]
    for elements in mainArray {
       arrayButton.append(0)
    }
现在你的阵型准备好了

更改按钮状态时更改其值, 0=禁用 1:选中

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

  let cell = tableView.dequeueReusableCell(withIdentifier: "HomeTableViewCell2", for: indexPath) as! HomeTableViewCell2
  cell.bookMarkBtn.addTarget(self, action: #selector(bookMarkBtnClick(sender:)), for: .touchUpInside)

    if(arrayButton[indexPath.row] == 1) {
          cell.bookMarkBtn.setImage(UIImage(named: "set_selected_image"), for: UIControlState.normal)
       }
     else {
         cell.bookMarkBtn.setImage(UIImage(named: "set_unselected_image"), for: UIControlState.normal)
     }
     cell.bookMarkBtn.tag = indexPath.row
     return cell
  }




  func bookMarkBtnClick(sender: UIButton) {
        if(arrayButton[sender.tag] == 1){
            arrayButton[sender.tag] = 0
            sender.setImage(UIImage(named: "set_unselected_image"), for: UIControlState.normal)
         }
          else {
               arrayButton[sender.tag] = 1 
               sender.setImage(UIImage(named: "set_selected_image"), for: UIControlState.normal)
}
}


对不起,我没有意识到请尝试添加一些代码与您的答案谢谢你能显示你做了什么吗?因为同样的东西对我有用?如果你点击一个按钮,该按钮的图像应该会改变吗?问题和之前一样,然后使用@Nilomisah的想法,这是一个选项。对不起,我没有意识到请尝试在回答中添加一些代码谢谢你能展示你所做的吗?因为同样的东西对我有用?如果你点击一个按钮,该按钮的图像应该会正确地改变?问题就像之前一样,然后使用@Nilomisah的想法,这是一个选项。你得到的结果是什么?你是否为json响应创建了任何模型类对象?您可以共享您的示例json吗?这是一个问题,因为可重用单元内存出列,反映了这一点。@Nilomisha尝试帮助我在您的自定义单元中添加
prepareforuse()
并将button变量设置为nil。您得到的结果是什么?您是否为json响应创建了任何模型类对象?您可以共享您的示例json吗?这是一个问题,因为可重用单元内存的出列反映了这一点。@Nilomisah尝试帮助我在您的自定义单元中添加
prepareForReuse()
,并将按钮变量设置为nil
@objc func bookmarkbtclick(发送方:UIButton){if(arrayButton[sender.tag]==1){**i在下面的行中得到错误**//使用未解析标识符'intIndexPath'arrayButton[intIndexPath]=0}否则{arrayButton[sender.tag]=1}
使用未解析标识符intIndexPath
arrayButton[intIndexPath]=0
现在查看@Emmanii忘了更改,抱歉,现在检查Friend!按钮的图像没有更改
@objc func bookMarkBtnClick(sender:UIButton){if(arrayButton[sender.tag]==1){**我在下一行出现错误**//使用了未解析的标识符'intIndexPath'arrayButton[intIndexPath]=0}否则{arrayButton[sender.tag]=1}
在IndeXPath中使用未解析标识符
arrayButton[IntiIndeXPath]=0
请立即查看@Emmanii忘了更改,抱歉,现在检查Friend!按钮的图像没有更改