Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.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 关闭TableViewCell的UIViewController_Ios_Swift_Uitableview - Fatal编程技术网

Ios 关闭TableViewCell的UIViewController

Ios 关闭TableViewCell的UIViewController,ios,swift,uitableview,Ios,Swift,Uitableview,我在UIViewController中有一个tableview。此tableview有一个带有按钮的动态表 我为TableViewCell内的每个按钮设置了如下功能: class ButtonTableViewCell: UITableViewCell { let defaults = UserDefaults.standard var targetTitle: String! @IBOutlet weak var buttonDisplay: UIButton!

我在UIViewController中有一个tableview。此tableview有一个带有按钮的动态表

我为TableViewCell内的每个按钮设置了如下功能:

class ButtonTableViewCell: UITableViewCell {

    let defaults = UserDefaults.standard
    var targetTitle: String!

    @IBOutlet weak var buttonDisplay: UIButton!

    func setButton(title: String) {
        buttonDisplay.setTitle(title.uppercased(), for: .normal)
        targetTitle = title
        buttonDisplay.addTarget(self, action: #selector(changeValue(_:)), for: .touchUpInside)
    }

    @objc func changeValue(_ sender: Any) {
        currentCar = targetTitle
        defaults.set(currentCar, forKey: "currentCar")
    }

}
如何关闭包含函数
@objc func changeValue(uu-sender:Any)
中TableView的UIViewController?

此外,由于按钮是动态添加的,因此我还需要tableview本身的动态高度-如何使用每个添加的单元格调整tableview的高度

UIViewController:

class DropdownViewController: UIViewController {

    @IBOutlet weak var tableViewButtons: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()
        tableViewButtons.delegate = self
        tableViewButtons.dataSource = self
    }

}

extension DropdownViewController: UITableViewDataSource, UITableViewDelegate {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return carsArray.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let rowData = carsArray[indexPath.row]

        let cell = tableView.dequeueReusableCell(withIdentifier: "buttonCell") as! ButtonTableViewCell
        cell.setButton(title: rowData.name)
        return cell
    }
}

您可以使用代理:

protocol ButtonTableViewCellDelegate {
   func dismissFromCell()
}

class ButtonTableViewCell: UITableViewCell {

    let defaults = UserDefaults.standard
    var targetTitle: String!

    // Delegate should be weak to avoid memory leaks
    weak var delegate: ButtonTableViewCellDelegate?

    @IBOutlet weak var buttonDisplay: UIButton!

    func setButton(title: String) {
        buttonDisplay.setTitle(title.uppercased(), for: .normal)
        targetTitle = title
        buttonDisplay.addTarget(self, action: #selector(changeValue(_:)), for: .touchUpInside)
    }

    @objc func changeValue(_ sender: Any) {
        currentCar = targetTitle
        defaults.set(currentCar, forKey: "currentCar")
        delegate?.dismissFromCell()
    }
}

您可以在此处获得有关委派模式的更多信息:

您可以使用委派:

protocol ButtonTableViewCellDelegate {
   func dismissFromCell()
}

class ButtonTableViewCell: UITableViewCell {

    let defaults = UserDefaults.standard
    var targetTitle: String!

    // Delegate should be weak to avoid memory leaks
    weak var delegate: ButtonTableViewCellDelegate?

    @IBOutlet weak var buttonDisplay: UIButton!

    func setButton(title: String) {
        buttonDisplay.setTitle(title.uppercased(), for: .normal)
        targetTitle = title
        buttonDisplay.addTarget(self, action: #selector(changeValue(_:)), for: .touchUpInside)
    }

    @objc func changeValue(_ sender: Any) {
        currentCar = targetTitle
        defaults.set(currentCar, forKey: "currentCar")
        delegate?.dismissFromCell()
    }
}

您可以在此处获得有关委派模式的更多信息:

您需要使用委派来执行操作。只需创建一个带有函数的协议,并在
changeValue
函数中调用委托即可

否则,请使用以下命令:

var responder: UIResponder! = self
repeat { responder = responder.next } while !(responder is UIViewController)
(responder as! UIViewController).dismiss()

它只是沿着响应器链向上移动,直到找到UIViewController,然后执行所需的任何操作。仅当您将UIViewController作为某个位置的父级时才使用此选项,否则它将无法工作。

您将需要使用委托来执行此操作。只需创建一个带有函数的协议,并在
changeValue
函数中调用委托即可

否则,请使用以下命令:

var responder: UIResponder! = self
repeat { responder = responder.next } while !(responder is UIViewController)
(responder as! UIViewController).dismiss()

它只是沿着响应器链向上移动,直到找到UIViewController,然后执行所需的任何操作。只有当您在某个地方有一个UIViewController作为父对象时,才使用此选项,否则它将不起作用。

我同意,但知道另一种方式并不是真正有害的。我同意,但知道另一种方式并不是真正有害的。