从 UICollectionViewCell class 访问主 class

Access main class from UICollectionViewCell class

我有 3 个 class。

  1. 我以编程方式实现了 UICollectionView - collectionViewClass.m
  2. 配置为cellscollectionView - myCells.m
  3. 我有一个 class myClass.m 调用 UICollectionView.

我想在 myCells.m 中访问 myClass.h 中的 label 我该怎么做?

我试过了:

myClass *mainClass = [[myClass alloc] init];
mainClass.myLabel.text = @"Something";

但这会创建 myClass 的新实例。如何从 myCells 访问相同的 myClass

更新

myCells.h

@protocol myCellsDelegate

- (void)changeLabelName;

@end

@interface myCells : UICollectionViewCell

@property (strong, nonatomic) id<myCellsDelegate> delegate;

@end

myCells.m

- (void)someMethod
{
    [self.delegate changeLabelName];
}

myClass.h

@interface MyViewController: UIViewController <myCellsDelegate>

myClass.m

- (void)changeLabelName {
    NSLog(@"Something");
}

为什么 NSLog 运行 没有?

更新 2

这里是我初始化cell的地方:

- (UICollectionView *)datesCollectionView
{
    if (!_datesCollectionView) {
        ...
        _datesCollectionView = [[UICollectionView alloc] initWithFrame:self.bounds collectionViewLayout:collectionViewLayout];
        [_datesCollectionView registerClass:[myCells class] forCellWithReuseIdentifier:kDIDatepickerCellIndentifier];
        _datesCollectionView.dataSource = self;
        _datesCollectionView.delegate = self;
        [self addSubview:_datesCollectionView];
    }
    return _datesCollectionView;
}

您不会从您的单元格中调用 myClass。单元格应该只显示您的内容。相反,您应该使用 delegation pattern.

您的单元格可以包含对实现您定义的特定协议的对象的引用。您通过此委托进行交流并执行所需的功能。

我看了你的代码。首先,我进入故事板并将标签的 "tag" 属性 设置为“11”(它可以是您想要的任何数字,只要没有其他东西使用该数字作为标签)。

然后在你的-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath;

我把这段代码:

UILabel *myLabel = [[UILabel alloc] init];
myLabel = (UILabel*)[collectionView viewWithTag:11];
//check myLabel.text against whatever you want

最终方法如下所示,您可以添加自己的 "isEqual or isEqualToString" 检查:

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    DIDatepickerCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:kDIDatepickerCellIndentifier forIndexPath:indexPath];
    UILabel *myLabel = [[UILabel alloc] init];
    myLabel = (UILabel*)[collectionView viewWithTag:11];
    //check myLabel.text against whatever you want
    cell.date = [self.dates objectAtIndex:indexPath.item];
    cell.itemSelectionColor = _selectedDateBottomLineColor;
    return cell;
}