- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在两个 View Controller 之间传递数据似乎已经使用委托(delegate)解决了。我的情况略有不同,因为我是新手,所以我不知道我是否可以与代表一起解决这个问题。
我有 3 个 View Controller 。 祖 parent
、 parent
和 child
。GrandParent
实例化显示 CategoryGroups
列表的 Parent
。
单击 CategoryGroup
实例化显示 Categories
列表的 Child
View Controller。
我希望当用户点击任何 Category
时,GrandParent
会知道正在点击的 Category
。
我现在有什么?
在 Child.h
View Controller 上
@protocol CategorySelectDelegate<NSObject>
- (void) categorySelected:(CategoryModel *) categoryModel;
@end
在 Child.m
View Controller 上
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"selected category:%@", _categories[(NSUInteger) indexPath.row]);
[self.delegate categorySelected:_categories[(NSUInteger) indexPath.row]];
[self dismissViewControllerAnimated:YES completion:nil];
}
在GrandParent.h
@interface GrandParent : UIViewController<CategorySelectDelegate>
在 GrandParent.m
- (void)viewDidLoad {
[super viewDidLoad];
ChildViewController *categoryViewController = [[ChildViewController alloc] init];
childViewController.delegate = self;
}
- (void)categorySelected:(CategoryModel *)categoryModel {
_categoryLabel.text = categoryModel.name;
NSLog(@"categoryLabel:%@", _categoryLabel.text);
}
但我知道这是不正确的,因为 GrandParent
不是 直接实例化 Child
的那个,总是父 的诞生> child
问题
- 如何将 categoryModel
从 Child
传递给 GrandParent
?
- 通常,如何将数据从一个子 Controller 传递回任何祖先 Controller ?
更新
目前,我已经添加了 2 个代表来解决这个问题
a.) 1 个委托(delegate)从 Child
到 Parent
b.) 1 个委托(delegate)从 Parent
到 GrandParent
这行得通,但我认为这不是一个好的设计,因为数据需要在 2 个或更多 View Controller 之间传递,因为最终会创建新的委托(delegate)来传递值。
最佳答案
我有或多或少相同的用例,我更喜欢通知,因为它似乎是松散耦合的对象,
仅仅为了交换数据而创建委托(delegate)并不是一个好的选择。
请引用How Best to Use Delegates and Notifications它说,
通知导致对象之间的松散耦合。耦合是松散的,因为发送通知的对象不知道什么在监听通知。 他的松散耦合非常强大,因为多个对象都可以注册收听同一个通知因此,如果其他 View Controller 或任何其他小部件想要处理数据,则无需再设置一个委托(delegate)即可轻松实现。
但是这条线也成立
通知和委托(delegate)提供如此不同的耦合这一事实表明它们应该在不同的场景中使用。如果 TableView 使用通知而不是委托(delegate),则使用 TableView 的所有类都可以为每个通知选择不同的方法名称。这会使代码难以理解,因为您需要去查找通知注册以确定调用了哪个方法。对于委托(delegate),很明显:所有使用 TableView 的类都必须以相同的方式进行结构化。
关于iOS:将数据从 ChildViewController 传递到 GrandParentViewController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27097334/
我在 iOS/Swift 中遇到 childViewController 的多级层次结构问题。当前设置从最低到最高分为三层: InfoViewController SelectionViewContr
我已添加一个 View 作为 ChildViewcontroller,并且我只想在 ChildViewController 中关闭它并转到上一个 ViewController 来自 ParentVie
我有一个来自 Realm 的对象,我将每个控件分配给对象,我想要的是将每个 childVC 上分配的每个对象传递给下一个 childVC。 我在 UIPageViewcontroller 上初始化了该
我有一个看起来像这样的父/ subview Controller 系统 -- (Parent) RootViewController -- (Child) ChildController
最新更新:我创建了一个全新的项目,其构建方式与下面完全相同。然而,这个测试项目实际上工作得很好,即使它看起来是一样的......我注意到的一件事是损坏版本中的父 View Controller 正在接
我尝试实现左侧面板,但是当我实现时,它似乎除了容器之外不会显示任何内容。 下面是我的代码: override func viewDidLoad() { super.viewDidLoad()
我有一个继承自 BaseViewController.swift 的类。我已经为核心数据更改跟踪定义了一个标志: var coreDataUpdated: Bool? 我还在 BaseViewCont
我有一个 pageViewController (UIPageViewController),它有一个 subview Controller (名为 soundPlayer)。声音播放器有静态 AVA
我在 UICollectionViewController 上有一个 childViewController。我有所以我的 childViewController 出现在屏幕上。但是当我注册一个单元格
我在我的 iOS 应用程序中创建了一个汉堡包菜单。 我的 rootViewController 中有一个 navigationBar 但现在我需要将 navigationBar 移动到我的 child
好吧,希望我能解释得尽可能清楚。 我有一个 Parent ViewController,它有一个 ContainerView,它将包含不同的 viewControllers/Class。我正在像这样在
我有一个 View Controller ,其中有一个按钮和一个窗口。 按下按钮,窗口中的 View 应该改变。 窗口中的 View 是另一个 ViewController 及其 View 。 当按下
我正在使用 XLPagerTabStrip在 Swift 4 中创建一个基于类别的阅读应用程序。我了解到可以使用以下函数轻松创建静态数量的 ViewController。 override func
在实现与 subview Controller 连接的 View 容器时,我偶然发现了一个奇怪的问题。 层次结构如下: 我有一个 UISplitViewController,在 MasterViewC
我有一个 ViewController,它有添加按钮,该按钮将在屏幕右侧打开 SideBarVC。如果我再次点击主 ViewController 屏幕,它应该关闭我的 SideBarVC。 我试过了
我在我的 MainViewController 中放置了一个容器。然后在该容器内添加FirstViewController let containerView = UIView() view.addS
我有一个 ViewController,我可以像这样在其中添加许多 child : [self addChildViewController:myViewController]; 在此
这个问题在这里已经有了答案: Passing data between view controllers (45 个答案) 关闭 8 年前。 我有 2 个 View ,ParentViewContr
我正在尝试在 iPad 上从使用 UIPopoverController 切换到 ChildViewControllers。我们有 4 或 5 个 VC 在父导航 subview Controller
我有一个 UIPageViewController,它有三个 childViewController。这些 childViewControllers 正在显示图表,每 5 秒使用从网络连接获取的动态数
我是一名优秀的程序员,十分优秀!