Xamarin.iOS中Alert按钮显示异常,OK按钮未出现,求代码修改方案
问题分析与解决方案
嘿,我来帮你搞定这个Alert按钮的问题~你的这段代码确实无法实现带OK按钮的Alert,问题出在对UIAlertController的使用方式上,下面给你详细拆解原因和修改方案:
问题根源
你错误地手动创建了UIButton来尝试添加按钮,但UIAlertController有自己的按钮添加机制——通过UIAlertAction来定义按钮,而且你创建的okayButton根本没有被添加到任何视图层级中,自然不会显示;另外你把添加Cancel动作的逻辑放在了这个无效按钮的点击事件里,完全不符合Alert的工作逻辑。
需要修改的内容
- 移除所有手动创建
UIButton的代码(包括它的点击事件逻辑) - 直接使用
UIAlertController.AddAction()方法添加OK按钮(以及你需要的其他按钮) - 按钮的点击逻辑直接绑定在
UIAlertAction的回调中
修改后的完整代码
public void Alert(List<string> listToAlert, string heading) { StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < listToAlert.Count; i++) { stringBuilder.Append(listToAlert[i]); stringBuilder.Append("\r\n"); } // 创建AlertController var okAlertController = UIAlertController.Create(heading, stringBuilder.ToString(), UIAlertControllerStyle.Alert); // 添加OK按钮(默认样式,点击后会自动关闭Alert) okAlertController.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Default, (action) => { // 这里写OK按钮被点击后的逻辑 // 比如做一些后续处理 })); // 如果需要Cancel按钮,可以再加一个 okAlertController.AddAction(UIAlertAction.Create("Cancel", UIAlertActionStyle.Cancel, null)); // 弹出Alert _rootVC.PresentViewController(okAlertController, true, null); }
补充说明
UIAlertActionStyle.Default:用于主要操作按钮(比如OK),样式是高亮的UIAlertActionStyle.Cancel:用于取消操作,通常会放在Alert的右侧(iOS的默认布局)- 按钮的回调参数
(action)可以让你在点击后获取该动作的信息,不需要的话可以传null
内容的提问来源于stack exchange,提问作者Mark Wardell




