2017-06-13 121 views
1

我有一个这样命名的协议。协议实现中的IBOutlet

protocol TextViewInputField { 
    var indexPath: IndexPath? { get set } 
    var textView: UITextView { get set } 
    var lblPlaceHolder: UILabel { get set } 
    func updatePHHiddenState() 
} 

一个单元TMStyle2Cell正在执行这样的协议。

class TMStyle2Cell: UITableViewCell,TextViewInputField { 

    @IBOutlet var lblPlaceHolder: UILabel! 
    @IBOutlet var textView: UITextView! 
    @IBOutlet var viewSeperator: UIView! 
    var indexPath: IndexPath? 

    func updatePHHiddenState() { 

    } 
} 

为什么我收到错误,TMStyle2Cell没有确认到协议TextVeiwInputField

回答

-1

您尚未在您的单元中实施您的协议的所有成员。您已经使用(已实施)var indexPath:仅限IndexPath。以下依然存在。

var textView:UITextView{get set} 
var lblPlaceHolder:UILabel{get set} 

另外请注意,如果你在你的单元中实现(使用)这两者,那么将会有重复的变量。因此,在实现协议成员之前,请更改(重命名)您单元中现有IBOutlet的名称。

@IBOutlet var lblPlaceHolder: UILabel! 
@IBOutlet var textView: UITextView! 

另外请注意,在你确定指标的协议,VAR textView:UITextView & var lblPlaceHolder:UILabel是强制性的成员国(不可选像var indexPath:IndexPath),所以你必须执行分配内存他们,否则他们会给你一个class initializer error

+0

我只为这个协议制作这两个IBOutlet。 –

+0

但它认为你的网点作为你的单元成员不是你协议的成员。 IBOutlets不能成为协议的一部分。 – Krunal

+0

有什么办法让它们成为协议的一部分? –

3

协议中的类型和您的实现不匹配。您需要:

protocol TextViewInputField { 
    var indexPath: IndexPath? { get set } 
    var textView: UITextView! { get set } 
    var lblPlaceHolder: UILabel! { get set } 
    func updatePHHiddenState() 
} 

如果你使用弱IBOutlets,您还需要包括:

protocol TextViewInputField { 
    var indexPath: IndexPath? { get set } 
    weak var textView: UITextView! { get set } 
    weak var lblPlaceHolder: UILabel! { get set } 
    func updatePHHiddenState() 
} 

最后,小了点,但是你的协议的一部分set可能是没有必要的。