如何从自定义 UIButton 类显示视图控制器?

Posted

技术标签:

【中文标题】如何从自定义 UIButton 类显示视图控制器?【英文标题】:How to show view controller from custom UIButton class? 【发布时间】:2016-03-28 22:16:34 【问题描述】:

我有以下视图层次结构:导航控制器,在其中我推送了另一个视图控制器,其中包含 UITableView 和单元格中的自定义 UIButtons。我有另一个视图控制器(MyCustomViewController2),我想用动画显示所有这些东西。

但我对这种层次结构感到困惑,我不知道如何在我的自定义 UIButton 类中覆盖 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 方法。我到目前为止的代码是:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

    MyCustomViewController2 *myVC = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:@"MyVC"];
    [self.window addSubview: myVC.view];

但这太糟糕了!而且我没有任何动画,我应该删除它以删除。接下来我可以尝试什么?

【问题讨论】:

【参考方案1】:

It's highly recommended not to subclass a UIButton. 所以我不会。

但是由于UIButton是UIControl的子类,所以可以直接使用这个方法:

- (void)addTarget:(id)target
           action:(SEL)action
 forControlEvents:(UIControlEvents)controlEvents

代码中的示例可能如下所示:

[self.myButton addTarget:self action:@selector(showOtherVC) forControlEvents: UIControlEventTouchUpInside];

当用户从按钮上抬起手指时,这将查看特定方法 (showOtherVC) 的目标 (self)

然后,您可以让当前的 View Controller 使用这个 UIViewController 方法作为示例以模态方式呈现新的 View Controller:

-(void)showOtherVC

     MyCustomViewController2 *myVC = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:@"MyVC"];
    [self presentViewController:myVC animated:true completion:nil];

在此处阅读有关 UIControl 的更多信息: UIControl Documentation

并在此处查看其他 UIViewController 模态转换样式: UIViewController Documentation

【讨论】:

以上是关于如何从自定义 UIButton 类显示视图控制器?的主要内容,如果未能解决你的问题,请参考以下文章

将数组从自定义单元格发送到另一个视图控制器

如何从自定义表格视图单元类中获取对表格视图控制器的引用

如何从自定义视图控制器类加载初始视图控制器

如何从自定义 UIView 类调用函数?

将数据从自定义表格视图单元格传递到 UIView 控制器

如何在 Swift 中将值从自定义单元格设置/传递到视图控制器