从UICollectionViewCell类访问主类

时间:2015-06-02 05:04:22

标签: ios objective-c class uicollectionview uicollectionviewcell

我有3节课。

  1. 我以编程方式实施了UICollectionView - collectionViewClass.m
  2. cells - collectionView
  3. myCells.m的配置
  4. 我有一个名为myClass.m的课程UICollectionView
  5. 我想在label中访问myClass.h myCells.m我该怎么办?

    我试过了:

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

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

    更新

    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;
    }
    

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我看了你的代码。首先,我进入故事板并将标签的“标签”属性设置为“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或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;
}