SDCAlertView 和 UIViewController 与 UIButton

Posted

技术标签:

【中文标题】SDCAlertView 和 UIViewController 与 UIButton【英文标题】:SDCAlertView and UIViewController with UIButton 【发布时间】:2014-01-18 16:27:10 【问题描述】:

我必须在中心显示一个自定义的 ios 7 样式警报请求器,其中包含一组自定义按钮(具体的类别过滤器切换)。为此,我在 GitHub 上找到了出色的 SDCAlertView。我的方法是创建一个自定义的UIViewController,它处理按钮的创建和按钮的触摸,实例化它,然后像这样插入到警报的contentView 中:

SDCAlertView *alert = [[SDCAlertView alloc] initWithTitle:@"Filter"
                                                  message:nil
                                                 delegate:self
                                        cancelButtonTitle:@"Clear"
                                        otherButtonTitles:@"Filter", nil];

GKSecondViewController *vc = [[GKSecondViewController alloc] init];
UIView *view = vc.view;
[alert.contentView addSubview:view];
[view sdc_centerInSuperview];

[alert.contentView sdc_pinHeight:100];
[alert.contentView sdc_pinWidth:100];
[alert.contentView setBackgroundColor:[UIColor redColor]];

[alert show];

我的视图控制器 (GKSecondViewController) 如下所示:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) 
        [self.view setBackgroundColor:[UIColor grayColor]];
        [self.view setTranslatesAutoresizingMaskIntoConstraints:NO];

        [self.view sdc_pinHeight:100];
        [self.view sdc_pinWidth:100];

        UIButton *button = [[UIButton alloc] init];
        [button setTitle:@"Button" forState:UIControlStateNormal];
        [button addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)]];
        [button setTranslatesAutoresizingMaskIntoConstraints:NO];

        [button sdc_pinHeight:100];
        [button sdc_pinWidth:100];

        [self.view addSubview:button];

        [button sdc_centerInSuperview];
    
    return self;


- (void)tap:(UIGestureRecognizer *)gesture

    gesture.view.backgroundColor = [UIColor blackColor];

(您可能也需要SDCAutoLayout。)当我单击警报中的按钮时,它会崩溃,并且在跟踪日志中没有任何提示。我错过了什么或做错了什么?

【问题讨论】:

【参考方案1】:

我不相信您可以获取视图控制器的视图并将其添加到其他视图层次结构中。

在你的情况下,我不会使用GKSecondViewController。我会在对象的视图控制器中创建按钮,并使用目标/动作与同一个视图控制器对话。如果您必须使用GKSecondViewControllerSDCAlertView 将必须支持视图控制器包含,此时它不支持。

【讨论】:

以上是关于SDCAlertView 和 UIViewController 与 UIButton的主要内容,如果未能解决你的问题,请参考以下文章

如何用点击手势关闭 SDCAlertView?

在 Objective-C 类中使用时如何自定义 SDCAlertView

在 SDCAlertView 中添加约束

SDCAlertView 回调 clickButtonAtIndex 在 iOS 运行时未被调用

当用户触摸警报时,如何防止我的 SDCAlertview 关闭?

UIView 内的表格不滚动或接收触摸