iOS - UIButton 作为 UIAlertController 上的子视图不触发事件

Posted

技术标签:

【中文标题】iOS - UIButton 作为 UIAlertController 上的子视图不触发事件【英文标题】:iOS - UIButton as Subview on UIAlertController not firing events 【发布时间】:2017-11-22 07:58:44 【问题描述】:

我在 UIAlertController 上添加 UIButton,但它没有触发任何事件的方法。

UIButton *cancelBtn = [UIButton buttonWithType:UIButtonTypeCustom];
[cancelBtn setFrame:CGRectMake((_alertController.view.frame.size.width/2)-30, _alertController.view.frame.size.height-50, 60, 30)];
[cancelBtn setTitle:@"Cancel" forState:UIControlStateNormal];
[cancelBtn setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
[cancelBtn setBackgroundColor:[UIColor orangeColor]];
[cancelBtn addTarget:self action:@selector(forceFullDismiss_FireDelegate:) forControlEvents:UIControlEventTouchUpInside];
cancelBtn.showsTouchWhenHighlighted = YES;

[_alertController.view setUserInteractionEnabled:YES];
[_alertController.view addSubview:cancelBtn];

按钮似乎突出显示,但相应的事件没有触发。

这里有什么问题?

【问题讨论】:

并且没有关于目标的错误?断点不会停在forceFullDismiss_FireDelegate ? 无错误。是的,断点不会停在 forceFullDismiss_FireDelegate 【参考方案1】:

这是来自UIAlertControllerdocumentation。

UIAlertController 类旨在按原样使用,而不是 支持子类化。此类的视图层次结构是私有的,并且 不得修改。

如果要添加取消按钮,可以使用

UIAlertAction* cancel = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) 
    //  action on cancel
];

[_alertController addAction:cancel];

【讨论】:

以上是关于iOS - UIButton 作为 UIAlertController 上的子视图不触发事件的主要内容,如果未能解决你的问题,请参考以下文章

iOS 11 prefersLargeTitles 以 uibutton 作为标题

iOS- UIAlert 仅在将应用程序图标更改为备用图标后才显示“确定”

如何为 UIAlert 指定大小

iOS - UIButton 作为 UIAlertController 上的子视图不触发事件

向自定义视图中的 UIButton 添加操作

iOS开发-56案例BUG:button的enabled控件的userInteractionEnabled以及两种提示框UIAlert和UIActionSheet