如何在iOS中关闭视图控制器?

3

我创建了一个库,如果主应用程序调用我的库,则会显示它,并从服务器上下载一些数据。但是,如果服务器出现错误,我想杀死库视图,但它没有起作用。
我在主机应用程序中有一个委托:

-(void)libraryResult:(NSString*)result{
NSLog(@"result: %@", result);
}

我在viewWillAppear方法中从服务器下载数据,下载有一个委托方法如下:

-(void)networkManagerError:(NSString *)error{
[hud hide:YES];
[self.presentedViewController dismissViewControllerAnimated:YES completion:nil];
[self.delegate libraryResult:error];
}

我在日志文件中看到应用程序返回到主应用程序,但视图没有发生变化。 如何解决这个问题?我的代码有什么问题吗?
4个回答

3

将这行代码更改为:

[self dismissViewControllerAnimated:YES completion:nil];

即可。


注:原始代码为使用presentedViewController来执行视图控制器的dismiss操作,而修改后的代码直接使用self来执行该操作。

0

试试这些...

[self dismissViewControllerAnimated:YES completion:nil];

0
如果您有VC1,它呈现VC2,则在VC2内的相应事件(例如关闭按钮点击或来自服务器的错误等)中,您应该调用:
[self.presentingViewController dismissViewControllerAnimated:YES completion:^{

    }]

如果您设置了VC1被通知VC2内发生的事件的方式,您可以使用以下代码:
[self dismissViewControllerAnimated:YES completion:nil];

然而,第一种方法更受推荐,因为它是更好的设计实践,并有助于VC1和VC2之间更松散的耦合。


0
尝试在您的“库结果”方法中触发通知,如果出现错误,并向当前控制器视图添加观察者。
[[NSNotificationCenter defaultCenter] postNotificationName:Remove_CurrentView object:nil];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(remove) name:Remove_CurrentView object:nil];

-(void)remove{
    [self dismissViewControllerAnimated:YES completion:nil];
}

这真的没有回答问题。 - rebello95

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接