我必须在中心显示一个自定义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。)当我单击警报中的按钮时,它崩溃,跟踪日志中没有任何提示。我想念或做错了什么?
最佳答案
我不相信您可以采用视图控制器的视图并将其添加到其他视图层次结构中。
在您的情况下,我不会使用GKSecondViewController
。我将在对象的视图控制器中创建按钮,并使用target / action与相同的视图控制器进行对话。如果必须使用GKSecondViewController
,则SDCAlertView
必须支持视图控制器包含,但目前尚不支持。