UICollectionView F#在init中调用方法

时间:2018-01-17 21:24:02

标签: f# xamarin.ios uicollectionview initialization uicollectionviewcell

 [<Register ("ChatViewCell")>]
type ChatViewCell (handle: IntPtr) as this = 
    inherit UICollectionViewCell (handle)


    [<DefaultValue>] static val mutable private id : NSString

    static member init = 
        printfn "Initializing ChatViewCell."
        ChatViewCell.id <- new NSString("ChatCell")


    override this.ReuseIdentifier = ChatViewCell.id

    let mutable profileImageView = new UIImageView()
    let mutable nameLabel = new UILabel()
    let mutable messageLabel = new UILabel()
    let mutable timeofMessageLabel = new UILabel()
    let mutable dividerLineView = new UIView()
    let mutable countLabel = new UILabel()

    let setupView() = 
        profileImageView.Frame <- CGRect(50.0, 0.0, 200.0, 100.0)
        profileImageView.ContentMode <- UIViewContentMode.ScaleAspectFill
        profileImageView.Layer.CornerRadius <- Conversions.nfloat(30)

我有以下UICollectionViewCell,我想在初始化单元格时调用setupView方法。但是,setupView方法似乎无法在init中使用init方法。我尝试将其移到sudo R CMD javareconf上方,但是,这也不起作用。

1 个答案:

答案 0 :(得分:1)

setupView被定义为实例函数,因为它没有static修饰符。它必须是实例函数(或实例方法),因为它访问profileImageView这是一个实例字段。

静态成员init无法调用实例函数,因为无法将实例显式传递给实例函数(您只能将实例显式传递给方法)。

如果你想在构造ChatViewCell时做一些初始化,你可以简单地将初始化语句放在类的主体中。执行此操作时,您需要使用通常隐含的do关键字。

e.g。

type ChatViewCell (handle: IntPtr) as this = 
    inherit UICollectionViewCell (handle)

    let mutable profileImageView = new UIImageView()

    do profileImageView.Frame <- CGRect(50.0, 0.0, 200.0, 100.0)
    do profileImageView.ContentMode <- UIViewContentMode.ScaleAspectFill
    do profileImageView.Layer.CornerRadius <- Conversions.nfloat(30)

有用的参考资料: