如何在 iOS Objective C 的嵌套 UICollectionViews 中从 Child UICollectionViewCell 的 UIButton 将值传递给新的 UIViewCon

Posted

技术标签:

【中文标题】如何在 iOS Objective C 的嵌套 UICollectionViews 中从 Child UICollectionViewCell 的 UIButton 将值传递给新的 UIViewController【英文标题】:How to pass values to new UIViewController from UIButton of Child UICollectionViewCell in nested UICollectionViews in iOS Objective C 【发布时间】:2015-02-06 11:23:01 【问题描述】:

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

UICollectionViewController UICollectionViewCell(父单元) 可用 UICollectionView UICollectionViewCell(childCell) UILable (valueLable) UIButton(提交) UICollectionViewCell(childCell) UILable (valueLable) UIButton(提交)

我想在单击“提交”按钮时将“valueLable”的文本发送到新的 UIViewController。 请帮帮我....

【问题讨论】:

【参考方案1】:

使用方法-(void) submitWithValue:(NSString*)text;创建协议SubmissionDelegateProtocol

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

在创建集合视图和进一步的集合及其集合视图时,您将必须传递一个 -let's say- sumbmitDelegate 属性(或 init 参数),该属性持有对实现协议的 UICollectionViewController 的引用。

id <SubmissionDelegateProtocol> submissionDelegate;

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

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

这是委托模式。

或者,您可以使用通知。

【讨论】:

太棒了..它帮助了我:)。通过协议方法...在我的情况下,某些 NSNotification 不起作用。 技术上你不需要那个协议,但它是一种很好的解耦类的简洁方法,不需要耦合。它也可以重复使用。【参考方案2】:

试试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

【讨论】:

以上是关于如何在 iOS Objective C 的嵌套 UICollectionViews 中从 Child UICollectionViewCell 的 UIButton 将值传递给新的 UIViewCon的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Objective C 查询 Realm DB 中的嵌套对象

Objective C如何从嵌套的JSON中读取

如何获取嵌套 JSON 值并将其加载到 Tableview Objective c 中?

如何在ios Objective C中传递PayTm事务的GET请求

如何在 iOS(Swift 或 Objective C)中实现这样的套接字调用?

如何从 AudioUnits C 函数调用 Objective-C 方法? (iOS)