gpt4 book ai didi

objective-c - 来自嵌套导航堆栈的委派

转载 作者:行者123 更新时间:2023-12-01 17:00:01 25 4
gpt4 key购买 nike

我有标准 View Controller 充当它上面的模态视图 Controller 的代表。
此模态视图 Controller 包含在导航 Controller 中。

在呈现模态并将另一个 View Controller 推送到导航堆栈后,我想将一些数据传递回初始委托(delegate) View Controller (呈现模态)。

我是否应该首先将导航堆栈的消息传递回模式导航 Controller 的 Root View Controller ,然后只使用该 Controller 的委托(delegate)方法?

或者

我是否应该将委托(delegate)属性传递给嵌套 View Controller ,然后使用实现的单独协议(protocol)直接调用委托(delegate)。它可以这样做,但我必须使用

@property (nonatomic, weak) id delegate;

代替
@property (nonatomic, weak) id <NestedViewDelegate> delegate;

否则,当我从堆栈中的预览 View Controller 传递委托(delegate)时,会出现不兼容的类型错误:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{
NestedViewController *nest = [[NestedViewController alloc] init];

// @property id <RootViewControllerDelegate> delegate
[nest setDelegate:[self delegate]];

[[self navigationController] pushViewController:nest animated:YES];

}

这种情况的最佳实践是什么?

谢谢

最佳答案

我会考虑使用通知来解耦。结帐NSNoticationCenter。

您在根目录中注册通知并在您的 child 中发布。

http://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/nsnotificationcenter_Class/Reference/Reference.html

示例

在您的 Child 对象中,您执行以下操作:

[[NSNotificationCenter defaultCenter] postNotificationName:kMyNotificationName object:self userInfo:@{ @"key" : @"value" }]];
kMyNotificationName在共享位置定义,例如 pch 或 Constants.h。

在 Root 中,您可以在 init 中执行类似的操作或者你推 child 的时候。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myNotificationName:) name:kMyNotificationName object:nil];

不要忘记在你的 dealloc 中或当你弹出 child 时删除观察者。
[[NSNotificationCenter defaultCenter] removeObserver:self kMyNotificationName object:nil];

现在您可以像这样处理通知:
- (void)myNotificationName:(NSNotification *)note
{
NSDictionary *userInfo = [note userInfo];

// Do stuff using the information passed in.
}

关于objective-c - 来自嵌套导航堆栈的委派,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7955309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com