Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何从选项卡栏控制器中的视图控制器中取消父视图?_Ios_Xcode_Uitabbarcontroller_Dismiss - Fatal编程技术网

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];