我有一个由三层视图控制器组成的应用程序:UITabBarController => UINavigationController => UIViewController中。它们都是用代码生成的,而不是使用IB生成的。根据通常的设计指南,标签栏位于底部。在我的UIViewController中,我使用此代码来呈现modalViewController:
myModalVC = [[MyModalViewController alloc] init];
[self.navigationController presentModalViewController:myModalVC animated:YES];
此工作正常,模态视图控制器弹出并覆盖整个屏幕。
然而,当在模态视图控制器中按下按钮时,我运行:
[self dismissModalViewControllerAnimated:YES];
模态视图控制器动画了。但是我可以看到原始的UIViewcontroller视图,但标签栏完全消失。我已经google了很多,但我找不到有同样问题的人。
答案 0 :(得分:3)
您应该将模态视图控制器委派给父视图控制器。 [self dismissModalViewControllerAnimated:YES];
应该由委托而不是模态视图本身完成,父视图负责解雇模态视图。
答案 1 :(得分:2)
实际上我通过谷歌搜索得到了更多。我使我的标签栏控制器成为app委托的属性,当它呈现模态vc时,它会这样做
UIApplication *myApp = [UIApplication sharedApplication];
noIBAppDelegate*appDelegate = (noIBAppDelegate*)myApp.delegate;
[appDelegate.tabBarController presentModalViewController:myModalVC animated:YES];
然后它通过这段代码解散它
UIApplication *myApp = [UIApplication sharedApplication];
noIBAppDelegate*appDelegate = (noIBAppDelegate*)myApp.delegate;
[appDelegate.tabBarController dismissModalViewControllerAnimated:YES];
这会修复标签栏的消失。
答案 2 :(得分:0)
尝试
[self.navigationController dismissModalViewControllerAnimated:YES];
答案 3 :(得分:0)
感谢您的回答!我遇到了同样的问题,但是我在Swift写作,所以我想我可以通过查看你的解决方案来解决我的问题。我只需要使用这两行来解决问题。没有别的东西需要。
postAsync: function(address, model) {
var deferred = $q.defer();
var token = tokenstorage.getBearer();
if (token == null) {
deferred.reject("token expired")
} else {
$http({
method: 'POST',
url: url + address,
data: model,
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': token
}
}).success(function(data) {
deferred.resolve(data);
}).error(function(data, status, headers, config) {
deferred.reject(null);
});
}
return deferred.promise;
和
tabBarController?.presentViewController(viewController, animated: true, completion: nil)
我还应该提到行:tabBarController?.delegate = self,在我的NavigationController的viewDidLoad函数中。