模态视图不重新显示?

时间:2011-09-23 10:17:43

标签: ios xcode view modal-dialog

我正在开发一款需要在启动时从网站上获取JPEG的应用。

显示启动画面,然后应用程序尝试从文件中获取Web地址。如果文件丢失,我打开一个模态视图(如UIModalPresentationFormSheet),该视图具有文本视图供用户输入地址 - 然后将地址保存到文件中。

用户点击“确定”按钮,尝试获取JPEG。如果地址错误或者JPEG不在Web服务器上,则必须重新打开模式对话框,以便用户可以将Web地址更改为正确的地址。

初始屏幕视图控制器包含以下方法:

- (void)openAddressDialog
{
    serverView *viewController = [[serverView alloc]init];
    [viewController setServerAddress:[businessLogic serverAddress]];
    [viewController setDelegate:self];
    [viewController setModalPresentationStyle:UIModalPresentationFormSheet];
    [self presentModalViewController:viewController animated:YES];
}

有趣的是,当我从viewDidLoad方法调用openAddressDialog方法时,没有出现模态视图。我不得不将它移动到viewDidAppear方法。因此,大概在观看模态视图之前,视图必须处于特定状态。

- (void)closeDialog:(UIViewController *)dialogController:(Boolean)actionRequired
{
    // If action required, get the server address from the dialog
    if (actionRequired)
    {
        serverView *viewController = (serverView *)dialogController;   
        NSString *address = [[viewController serverAddress]copy];
        [businessLogic setServerAddress:address];
        [self dismissModalViewControllerAnimated:YES];

        if (![logoImage image])
        {
            [logoImage setImage:[businessLogic eventLogo]];

            if (![logoImage image])
            {
                [self openAddressDialog];
            }            
        }

    }
    else
    {
        exit(0);
    }
}

当用户触摸OK或Cancel时,这是从模态视图回调的委托方法。 actionRequired参数表示已点击OK。如果是这样,则从模态视图中拾取新的服务器地址,并取消模态视图。尝试从新地址(在业务规则类中)获取JPEG,如果仍然找不到文件,则再次调用上面显示的第一个方法(openAddressDialog),以便用户可以再次更正地址。 / p>

模态视图第一次显示正常,但如果用户输入了错误的地址,则不会重新出现。这是否与我有关,试图在解雇之后如此快速地表示模态视图?

我对iPad开发很陌生,所以对任何建议都很感激。

另一件事,它表明我对C ++的经验不足,是......如果我在m文件中声明一个私有方法,那就叫它吧

- (void) methodB

并且该方法调用另一个私有方法,让我们称之为

- (void) methodA

方法A必须在m文件中比methodB更早定义。如果我也想让methodA调用methodB,我就会陷入僵局。我所知道的唯一方法是在h文件中声明methodB - 这使得它公开。我如何编码这种情况,以便外界无法看到这两种方法?

1 个答案:

答案 0 :(得分:0)

如果用于为serverView创建nib,那么就这样做

  serverView *viewController = [[serverView alloc]initWithNibName:@"serverView" bundle:nil];