如何从 iOS Objective C 中嵌套的 UICollectionViews 中子 UICollectionViewCell 的 UIButton 的 UIButton 向新的 UIViewController 传递值

How to pass values to new UIViewController from UIButton of Child UICollectionViewCell in nested UICollectionViews in iOS Objective C

我有带有自定义 UICollectionViewCell 的 UICollectionViewController,它包含子 UICollectionView 和自定义 childUICollectionViewCell。

我想在单击 "Submit" 按钮时将 "valueLable" 的文本发送到新的 UIViewController。 请帮助我....

使用方法 -(void) submitWithValue:(NSString*)text;

创建协议 SubmissionDelegateProtocol

您的 UICollectionViewController 实现(符合)协议。 它应该为 childViews 提供这种方法来调用它。

在创建集合视图和进一步的集合及其集合视图时,您将必须传递一个 - 让我们说 - sumbmitDelegate 属性 (或初始化参数),它持有对 UICollectionViewController 的引用,它实现了协议。

id <SubmissionDelegateProtocol> submissionDelegate;

当您使用故事板时,方法 prepareForSegue: 是将更多信息传递给后续视图控制器的合适位置。但是如果两个集合视图都使用相同的 ViewContoller 作为它们的数据源,就像你的树所建议的那样,那么它应该更容易。

所以最后每个单元格都持有对视图控制器的(弱)引用。 然后,在按下按钮时调用委托方法 [submissionDelegate submitWithValue:[valueLable text]];

这是委托模式。

或者,您可以使用通知。

尝试NSNotification Center

在子视图控制器中,postNotifictaion

并在 UIViewController 中收听相同的通知。

您也可以使用NSNotificationCenter传递数据。

- (void) submitButtonClicked
{

    [[NSNotificationCenter defaultCenter] postNotificationName:@"dataFromChildToParent"  object:nil userInfo: valueLable.text];
}

并在 UIViewControllers ViewDidLoad 方法中

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadRegistrationNotification:) name:@"dataFromChildToParent" object:nil];

并实现选择器

- (void) loadRegistrationNotification:(NSNotification *)noti {
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"dataFromChildToParent" object:nil];

    NSString *valueLabelText = [noti userInfo];
    NSLog(@"Notification data %@", valueLabelText);
}

有关 NSNotificationCenter 的详细说明,请参阅此 Tutorial