如何从 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。
- UICollectionViewController
- UICollectionViewCell(父单元格)
- UILable
- UICollectionView
- UICollectionViewCell(子单元格)
- UILable (valueLable)
- UIButton(提交)
- UICollectionViewCell(子单元格)
- UILable (valueLable)
- UIButton(提交)
我想在单击 "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];
}
并在 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
我有带有自定义 UICollectionViewCell 的 UICollectionViewController,它包含子 UICollectionView 和自定义 childUICollectionViewCell。
- UICollectionViewController
- UICollectionViewCell(父单元格)
- UILable
- UICollectionView
- UICollectionViewCell(子单元格)
- UILable (valueLable)
- UIButton(提交)
- UICollectionViewCell(子单元格)
- UILable (valueLable)
- UIButton(提交)
- UICollectionViewCell(子单元格)
- UICollectionViewCell(父单元格)
我想在单击 "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];
}
并在 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