文本字段不会成为第一响应者

时间:2016-09-23 02:25:34

标签: ios uialertcontroller becomefirstresponder

我似乎遇到了这样一种情况,即调用BecomeFirstResponder()无法正常工作。

假设我在视图中有两个文本框。第一个文本框是ViewDidLoad();

的第一个响应者

点击按钮,我希望第二个文本框成为第一响应者。

问题是如果我使用下面的行启动对话框,

var alertView = UIAlertController.Create("Title", "Message", UIAlertControllerStyle.Alert);
alertView.ModalPresentationStyle = UIModalPresentationStyle.OverCurrentContext;

var negativeAction = UIAlertAction.Create("Cancel", UIAlertActionStyle.Cancel, null);
alertView.AddAction(negativeAction);

//if (!string.IsNullOrWhiteSpace(""))
//{
//  var positiveAction = UIAlertAction.Create("", UIAlertActionStyle.Default, null);
//  alertView.AddAction(positiveAction);
//}

PresentViewController(alertView, true, delegate {
    alertView.ResignFirstResponder();
});

然后调用tbSecond.BecomeFirstResponder();第一个响应者无法更改。

如果我使用旧的UIAlert类启动对话框,如下所示,第一个响应者按预期工作。

var alertView = new UIAlertView("Title", "Message", null, "Cancel", null);
alertView.Show();

然后致电

tbSecond.BecomeFirstResponder();

如果我改变顺序,即调用tbSecond.BecomeFirstResponder();我无法改变调用的顺序。在我调用ShowDialog之前,它按预期工作。但由于种种原因,我无法改变这种秩序。

1 个答案:

答案 0 :(得分:0)

您可以使用此

DispatchQueue.main.asyncAfter(deadline: .now() + 0.01) {
    alertController.textFields?.last?.becomeFirstResponder()
}