代码之家  ›  专栏  ›  技术社区  ›  dengApro

如何以只读方式设置UICollectionViewCell的属性

  •  0
  • dengApro  · 技术社区  · 8 年前

    我有一个UITableViewCell ProductsCell ,我在nib中注册了它,并退出队列以使用它。

    我想将其属性设置为只读。如何做得更好?

    代码如下:

    @property (nonatomic, strong, readonly) MyProductsVC * targetMyProductsVC;
    
    - (MyProductsVC *)targetMyProductsVC{
    
        if(!_targetMyProductsVC){
            UIResponder *target = self.nextResponder;
            do {
                target = target.nextResponder;
            } while (![target isKindOfClass: ZBMyProductsVC.self] && target != nil);
            _targetMyProductsVC = (ZBMyProductsVC *)target;
    
        }
        return _targetMyProductsVC;
    }
    

    我无法实施。在里面 -init , -awakeFromNib ,因为我使用 UIResponder 查找父ViewController。

    因为在上述方法中,单元格似乎没有添加到超级视图中。

    如果我喜欢这个,

    @property (nonatomic, strong, readonly) MyProductsVC * targetMyProductsVC;
    

    Xcode报告:

    使用未声明的标识符“\u targetMyProductsVC”

    可以设置两个属性。一个在内部,如上所述,只需将另一个只读属性设置在外部 getter 方法( return 以前的财产。) 有点脏,

    还有更好的方法吗?

    代码可以工作:

    @property (nonatomic, strong, readonly) MyProductsVC * targetMyProductsVCReadOnly; 
    @property (nonatomic, strong) MyProductsVC * targetMyProductsVC;
    
    
    - (MyProductsVC *)targetMyProductsVC{
    
        if(!_targetMyProductsVC){
            UIResponder *target = self.nextResponder;
            do {
                target = target.nextResponder;
            } while (![target isKindOfClass: ZBMyProductsVC.self] && target != nil);
            _targetMyProductsVC = (ZBMyProductsVC *)target;
    
        }
        return _targetMyProductsVC; }
    
    
    - (MyProductsVC *)targetMyProductsVCReadOnly{
        return self.targetMyProductsVC; }
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   Community Mohan Dere    5 年前

    因为您正在为 readonly 属性,这意味着只有一个访问器(即没有setter),编译器不会自动声明支持变量。从…起 Encapsulating Data :

    笔记 :编译器将在所有情况下自动合成一个实例变量,其中它还将合成至少一个访问器方法。如果为 readwrite 属性或 只读 属性,编译器将假定您正在控制属性实现,并且不会自动合成实例变量。

    如果仍然需要一个实例变量,则需要请求合成一个:

    @synthesize property = _property;  
    

    在getter实现之前插入上述内容,以解决 未声明的变量 错误

    HTH公司