2017-06-13 118 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可能是沒有必要的。