如何以编程方式浏览按钮
How to navigate through button programmatically
我在情节提要中创建了一个 table 视图单元格,并为 it.In 创建了一个 cocoa 触摸 class,它将有一个按钮,所以我在这里想要以编程方式单击按钮导航到另一个视图控制器。
这是我的代码
@IBOutlet 弱变量 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") 作为?说明ViewController
`
比如“'TableViewCell' 类型的值没有成员 'storyboard'。
感谢 advance.Help 我清除错误。
您无法从 UITableCell 访问 self.storyboard。您应该从包含您的 UITableView 的主 ViewController 导航。为此,您需要使用委托。在您的 UITableCell class 顶部添加:-
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 的主视图控制器中,在
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)
}
}
如果您发现使用它有任何困难,请告诉我。
创建完成块以获取视图控制器上的按钮操作 Class
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)
}
}
在视图控制器中执行块
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
}
我在情节提要中创建了一个 table 视图单元格,并为 it.In 创建了一个 cocoa 触摸 class,它将有一个按钮,所以我在这里想要以编程方式单击按钮导航到另一个视图控制器。
这是我的代码
@IBOutlet 弱变量 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") 作为?说明ViewController ` 比如“'TableViewCell' 类型的值没有成员 'storyboard'。
感谢 advance.Help 我清除错误。
您无法从 UITableCell 访问 self.storyboard。您应该从包含您的 UITableView 的主 ViewController 导航。为此,您需要使用委托。在您的 UITableCell class 顶部添加:-
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 的主视图控制器中,在
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)
}
}
如果您发现使用它有任何困难,请告诉我。
创建完成块以获取视图控制器上的按钮操作 Class
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)
}
}
在视图控制器中执行块
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
}