0

当我关闭视图控制器时,我想提示用户输入。在实际发生解雇之前,此输入是必要的。

我尝试将以下代码放在我的视图控制器中:

-(void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion
{
    UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Hello!" message:@"Please enter your name:" delegate:self cancelButtonTitle:@"Continue" otherButtonTitles:nil];
    alert.alertViewStyle = UIAlertViewStylePlainTextInput;
    UITextField * alertTextField = [alert textFieldAtIndex:0];
    alertTextField.keyboardType = UIKeyboardTypeNumberPad;
    alertTextField.placeholder = @"Enter your name";
    [alert show];

    [super dismissViewControllerAnimated:flag completion:completion];
}

但是,由于 UIAlertView 不会阻​​塞和等待,因此会执行超级调用。

我正在讨论从该函数中删除超级调用,并将其移至 alertView:clickedButtonAtIndex: 函数。我想我需要首先存储传递给dismissViewControllerAnimated的标志和完成变量,以便我可以在alertView:clickedButtonAtIndex:函数中使用它们。

有没有更好的方法,这样我就不必为超级调用存储这些参数值了?

4

4 回答 4

1

您可以尝试制作一种新方法,ala:

-(void) dismissButtonPressed
{
    UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Hello!" message:@"Please enter your name:" delegate:self cancelButtonTitle:@"Continue" otherButtonTitles:nil];
    alert.alertViewStyle = UIAlertViewStylePlainTextInput;
    UITextField * alertTextField = [alert textFieldAtIndex:0];
    alertTextField.keyboardType = UIKeyboardTypeNumberPad;
    alertTextField.placeholder = @"Enter your name";
    [alert show];
}

然后在按下关闭按钮时调用该方法(以不同的方式完成,具体取决于您是以编程方式创建视图还是在 Interface Builder 中创建视图)。然后,只有当 UIAlertView 被解除
(即在-(void) alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex)你解除视图控制器。

于 2013-07-12T01:47:53.080 回答
1

您应该在调用之前拦截关闭请求,dismissViewControllerAnimated:并使用它来阻止调用并显示警报。然后,在警报委托方法中调用dismissViewControllerAnimated:. self不要尝试删除super并稍后调用它,它会变得混乱并且维护起来很痛苦。

于 2013-07-11T14:37:22.353 回答
1

对我来说,我不明白为什么你不能在 alertView:clickedButtonAtIndex 中调用dismiss。您可以将标志参数设置为 YES 或 NO,并将完成块参数设置为 nil。

当然,这确实需要在用户实际尝试关闭视图控制器之前使用 UIAlertView 提示用户。

于 2013-07-11T14:38:30.303 回答
0

UIAlertViewbutton您按下以立即关闭并在您处理您需要的输入的delegate方法中创建UIAlertView,当您得到您想要dismiss的内容时,只需viewcontroller.

于 2013-07-11T14:41:40.737 回答