- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 UINavigationGroup
带有一个名为 MainViewController
的 Root View Controller .这里面MainViewController
我正在调用另一个 UINavigationController
作为模态如下:
- (IBAction)didTapButton:(id)sender {
UINavigationController * someViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"someNavigationController"];
[self.navigationController presentViewController:someViewController animated:YES completion:nil];
}
在这 someNavigationController
里面,用户正在经历一些过程,所以导航 Controller 被一些 UIViewControllers
推送.用户完成该过程后,在最后UIViewController
称为 finalStepViewController
,我将按如下方式关闭模态:
[self dismissViewControllerAnimated:YES completion:nil];
模态确实被取消了,用户回到了最初的MainViewController
.不过,我想再推一个 UIViewController
至 MainViewController
的 NavigationController(例如:表示用户已成功完成流程的 View )。最好在关闭模态之前。
我试过以下方法:
<强>1。使用 presentingViewController
UIViewController * successViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"successViewController"];
[self.presentingViewController.navigationController successViewController animated:YES];
结果:没有错误,但也没有任何反应。
<强>2。委托(delegate)/协议(protocol)
finalStepViewController.h
里面MainViewController.h
并附加 <finalStepViewControllerDelegate>
MainViewController.m
添加了一个名为 parentMethodThatChildCanCall
的方法从 finalStepViewController.m
调用将以下内容添加到 finalStepViewController.h
:
@protocol finalStepViewControllerDelegate <NSObject>
-(void)parentMethodThatChildCanCall;
@end@property (assign) id <finalStepViewControllerDelegate> delegate;
和 @synthesize delegate;
在模型中
someViewController
在上面提到的didTapButton
IBA对自己的行动。这显示了一条通知错误:Assigning to id<UINavigationControllerDelegate>' from incompatible type UIViewController *const __strong'
[self.delegate parentMethodThatChildCanCall]
就在关闭模式之前。结果:除了通知错误外,没有失败,但没有任何反应 parentMethodThatChildCanCall
不被调用。
知道我做错了什么/我应该做什么吗?这是我使用 Objective-C 的第二周,大部分时间我都不知道自己在做什么,所以任何帮助/代码将不胜感激!
谢谢。
最佳答案
使用 NSNotificationCenter
可以更轻松地实现这一点。
在您的 MainViewController
的 -viewDidLoad
中添加以下代码
typeof(self) __weak wself = self;
[[NSNotificationCenter defaultCenter] addObserverForName:@"successfullActionName"
object:nil
queue:[NSOperationQueue mainQueue]
usingBlock:^(NSNotification *note) {
SuccessViewController *viewController; // instantiate it properly
[wself.navigationController pushViewController:viewController animated:NO];
}];
在 dealloc 时从 NSNotificationCenter 中删除你的 Controller
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
在 FinalStepViewController
中,在关闭通知之前关闭 View Controller 的操作
- (IBAction)buttonTapped:(id)sender {
[[NSNotificationCenter defaultCenter] postNotificationName:@"successfullActionName" object:nil];
[self dismissViewControllerAnimated:YES completion:nil];
}
这个例子非常粗糙而且不理想,你应该为你的通知名称使用常量,并且在某些情况下存储由 NSNotificationCenter
返回的观察者以删除特定的观察者。
-- 编辑我还想提一下,addObserverForName:object:queue:usingBlock:
方法实际上将观察者作为 id
类型对象返回。您需要在您的类中将对它的引用作为 iVar 存储,并在调用 dealloc
方法时将其从 NSNotificationCenter
中删除,否则观察者将永远不会被释放。
关于ios - 从模态或推送 View 调用父方法到 presentingViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22120752/
我已经设置了一个自定义转换,设置为 similar to this tutorial here . 我现在要做的是更新(下方)UIViewController 上的 BOOL。这是在顶部显示 Cont
我的应用导航如下: NavigationController ---> RootViewController --(Show Segue)-> SomeViewController --(Show S
当我关闭弹出式 ViewController 时,我想在呈现 ViewController 上调用一个方法。我像这样从“MainViewController”启动弹出窗口:(在 EzPopup 库的帮
我有三个 View Controller ,a、b 和 c。我从a开始,然后呈现b。如果用户注销,则会显示 c。否则我会留在 b 上,下面的代码片段来自那里。如果我只从 a 到 b,则 present
有没有办法在 iOS 中呈现 ViewController,同时保持呈现的 ViewController 可见?现在,PresentingViewController 似乎在动画完成后就被隐藏了。 最
我有三个连接到选项卡栏 Controller 的 View Controller ,我认为它应该自动设置 presentingViewController/presentedViewControlle
我正在研究类似于 Mail.app 的打开草稿行为的 UIPresentationController 子类。呈现 View Controller 时,它不会一直到达顶部,呈现 View Contro
我想按照以下步骤集成 GTMAppAuth 和 GDrive: $ pod 安装 target 'GTMAppAuth Drive Example iOS' do platform :ios, '
我试图了解我的应用程序的一个奇怪行为,这里是一个描述(在一个简单的项目中测试)。 ViewControllerA 正在模态呈现 ViewControllerB ViewControllerB 包含一个
当用户购买completion handler 时通知我并关闭viewController。但是,我想在 viewController 关闭后向用户显示/显示一个 alert 。当我在调试器中单步执行
新手 iOS 开发人员在这里采用了 iOS 应用程序。 我有一个 iOS 应用程序的设置部分,当用户单击“完成”时,我想要模态视图 Controller (它当前使用的)并且我想在 presentin
在我的 MainViewController 中,我通过这个展示了另一个 View Controller : MessageViewController *messageController = [[
我只是添加了 TabBarController + NavigationController。在此之前一切正常,但现在当我从模态调用 presentingViewController 时,出现此错误:
我有一个 UINavigationGroup带有一个名为 MainViewController 的 Root View Controller .这里面MainViewController我正在调用另一
我在主视图 Controller 中有一个按钮,它以模态方式呈现另一个 View Controller 。当模态 vc 向上滑动时,我制作了一个主视图 Controller 变暗的自定义动画。但是,当
给定: 呈现 ViewController B 的 ViewController A ViewController B 没有引用 ViewController A(隐含的 presentingView
我正在使用 GoogleSignIn SDK(与 cocoapods 一起安装)学习谷歌登录到应用程序。我没有在 pod 文件中指定版本,它自动安装了 GoogleSignIn (4.4.0)。浏览文
如果 ViewControllerA 嵌入到 navigationController 中,并且 ViewControllerB 由 ViewControllerA 模态呈现。 当我打印 ViewCo
我有三个 ViewController,它的顺序是(A present B which presents C),当我留在 C viewController 中时,我必须将 ViewController
我曾经使用呈现样式 UIModalPresentationCurrentContext 从另一个 UIViewController 呈现一个 UIViewController。但它不允许我旋转 pre
我是一名优秀的程序员,十分优秀!