Ios 如何从选项卡栏控制器中的视图控制器中取消父视图?
我的应用程序有一个主屏幕(Ios 如何从选项卡栏控制器中的视图控制器中取消父视图?,ios,xcode,uitabbarcontroller,dismiss,Ios,Xcode,Uitabbarcontroller,Dismiss,我的应用程序有一个主屏幕(mainView)。在主视图上,我有一个按钮。当用户点击它时,我使用 [self presentViewController:libraryView animated:YES completion:nil] 显示另一个视图(libraryView)。然后,在libraryView上,我使用 [self.view addSubview:tabBarController.view] 要添加一个具有两个视图控制器的UITabBarController:featuredBo
mainView
)。在主视图上,我有一个按钮。当用户点击它时,我使用
[self presentViewController:libraryView animated:YES completion:nil]
显示另一个视图(libraryView
)。然后,在libraryView
上,我使用
[self.view addSubview:tabBarController.view]
要添加一个具有两个视图控制器的UITabBarController
:featuredBooks
和recentBooks
一切正常。但是,当我向featureBooks
添加一个按钮以取消错过libraryView
并返回到mainView
时,以下方法不起作用
[self dismissViewControllerAnimated: YES completion:nil]
[self.parentViewController dismissViewControllerAnimated: YES completion:nil]
[self.presentingViewController dismissViewControllerAnimated: YES completion:nil]
我知道原因:self
指的是featureBooks
的视图,而不是libraryView
那么,如何从选项卡栏控制器内的视图控制器(featureBooks
或recentBooks
)中引用libraryView
,将其关闭并返回到mainView
非常感谢。使libraryView的mainView代理对象。。。然后,当您从libraryView调用委托方法时,mainView将在其代码中调用dismissViewcController方法 因此: 1) 创建到libraryView控制器中。h代码:
@protocol LibraryViewDelegate
- (void) LibraryViewDelegate_DismissButtonClicked;
@end
2) 然后在mainView.h文件中创建一个属性:
@property(nonatomic, assign) NSObject<LibraryViewDelegate> *delegate;
并在libraryView对象创建之后和显示之前将mainView指定给此属性
3) 将以下代码写入mainview.m文件:
-(void)LibraryViewDelegate_DismissButtonClicked{
//put here the code for dismissing mainView created modalViewController (libraryView)
}
4) 然后编写调用的代码:
[self.delegate LibraryViewDelegate_DismissButtonClicked];
按下“取消”按钮进入libraryView谢谢您的回答和示例代码。在询问示例代码后,我搜索并删除了我的评论:P无论如何,谢谢。但是,我想你可能误解了我。我想从
featuredBooks
中删除libraryView
(选项卡栏控制器的视图控制器。该选项卡栏控制器是libraryView
的子视图)。我试过你的代码,但没有按我想要的方式工作。再次感谢你的代码。最后,我成功了。我不再使用Interface Builder,而是以编程方式创建选项卡栏控制器、视图控制器。现在代理工作正常。
[self.delegate LibraryViewDelegate_DismissButtonClicked];