如何以编程方式浏览按钮

时间:2018-09-04 07:01:54

标签: swift4.1

我在故事板上创建了一个表格视图单元格,并为此创建了一个可可触摸类,因为它将有一个按钮,因此在这里我想以编程方式单击该按钮导航到另一个视图控制器。

这是我的代码

@IBOutlet弱var findOutButton:UIButton!

override func awakeFromNib()
{
    super.awakeFromNib()

   findOutButton.addTarget(self, action: Selector(("action:")), for: UIControlEvents.touchUpInside)

}
func action(sender: UIButton) {


let vc5 = self.storyboard.instantiateViewController(withIdentifier: "DescriptionViewController") as? DescriptionViewController

    self.navigationController?.pushViewController(vc5!, animated: true)
}

此行显示错误

让vc5 = self.storyboard.instantiateViewController(withIdentifier:“ DescriptionViewController”)为? DescriptionViewController ` 例如“ TableViewCell类型的值没有成员'storyboard'。

预先感谢。请帮助我清除错误。

2 个答案:

答案 0 :(得分:0)

您不能从UITableCell访问self.storyboard。您应该从包含UITableView的主ViewController导航。为此,您需要使用委托。在UITableCell类的顶部添加以下内容:-

protocol CustomTableDelegate {
    func DelegateButtonPressed()
}
class YourClass : UITableViewCell{
var delegate : CustomTableDelegate? = nil

override func awakeFromNib()
{
    super.awakeFromNib()

   findOutButton.addTarget(self, action: Selector(("action:")), for: UIControlEvents.touchUpInside)

}
func action(sender: UIButton) {

self.delegate?.DelegateButtonPressed()
}
}

中,在拥有UITableView的主View Controller中
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "YourClass", for: indexPath) as! YourClass
cell.delegate = self
return cell
}

然后还将代理添加为:-

class YOURVIEWCONTROLLER:UIViewController, CustomTableDelegate{
func DelegateButtonPressed(){
let vc5 = self.storyboard.instantiateViewController(withIdentifier: "DescriptionViewController") as? DescriptionViewController

    self.navigationController?.pushViewController(vc5!, animated: true)
}
}

如果您在使用此工具时遇到任何困难,请告诉我。

答案 1 :(得分:0)

创建完成块以获取对View Controller类的按钮操作

class YourCellClass : UITableViewCell{
var completionBlock : ((_ sender : UIButon)->())?

override func awakeFromNib()
{
    super.awakeFromNib()

   findOutButton.addTarget(self, action: Selector(("action:")), for: UIControlEvents.touchUpInside)

}
 func action(sender: UIButton) {
   completionBlock?(sender)
 }
}

在View Controller中执行块

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

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

     cell.completionBlock = { (sender) -> Void in

        /* Here sender is button refrence so you can modify property of the button also */

      let vc5 = self.storyboard.instantiateViewController(withIdentifier: "DescriptionViewController") as? DescriptionViewController  
      self.navigationController?.pushViewController(vc5!, animated: true)
    }

  return cell
}