如何在 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];
并在UIViewController
s 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 中的嵌套对象
如何获取嵌套 JSON 值并将其加载到 Tableview Objective c 中?
如何在ios Objective C中传递PayTm事务的GET请求