在相同的頭文件,你有一個NIRecyclableView
類,它從UIView
繼承並實現NIRecyclableView
協議,所以你可能要返回對象,而不是
@interface NIRecyclableView : UIView <NIRecyclableView>
// Designated initializer.
- (id)initWithReuseIdentifier:(NSString *)reuseIdentifier;
@property (nonatomic, readwrite, copy) NSString* reuseIdentifier;
@end
使頭的結合是這樣的
[BaseType (typeof (NSObject))]
interface NIViewRecycler {
[Export ("dequeueReusableViewWithIdentifier:")]
NIRecyclableView DequeueReusableView (string reuseIdentifier);
[Export ("recycleView:")]
void RecycleView (NIRecyclableView view);
[Export ("removeAllViews")]
void RemoveAllViews();
}
[Model]
[Protocol]
[BaseType (typeof (NSObject), Name = "NIRecyclableView")]
interface NIRecyclableViewProtocol {
[Export ("reuseIdentifier", ArgumentSemantic.Copy)]
string ReuseIdentifier { get; set; }
[Export ("prepareForReuse")]
void PrepareForReuse();
}
// Here you would do interface NIRecyclableView : NIRecyclableViewProtocol
// But NIRecyclableView already implements reuseIdentifier
// So you just inline the missing method PrepareForReuse
// and you get the same results
[BaseType (typeof (UIView))]
interface NIRecyclableView {
[Export ("initWithReuseIdentifier:")]
IntPtr Contructor (string reuseIdentifier);
[Export ("reuseIdentifier", ArgumentSemantic.Copy)]
string ReuseIdentifier { get; set; }
[Export ("prepareForReuse")]
void PrepareForReuse();
}
一個協議就像嗨這個對象也可以響應這個目標-c消息,如果你想要的話,所以你可以手動內聯他們在接口定義像我們做阿博ve或NIRecyclableView : NIRecyclableViewProtocol
,在這種情況下我們不必。
希望這有助於
亞歷
我明白了這一點,但是,雨雲創建這些簡單的類堅持爲用戶輕鬆實現。在整個(幾乎?)框架中,他們使用協議而不是基類來獲得靈活性。如果使用協議NIRecyclableView從UIView繼承的「SampleClass」可以綁定爲從超類「NIRecyclableView」繼承的「SampleClass」,那麼這將起作用。這可能嗎? –
你必須自己實現協議,讓我們認爲你像上面所做的那樣用一個小修改來綁定protcol'UIView DequeueReusableView(string reuseIdentifier);'而不是'NIRecyclableView DequeueReusableView(string reuseIdentifier);',現在你將擁有ac#類型調用'NIRecyclableViewProtocol',現在讓我們考慮創建一個名爲'MyOwnUIView:UIView'的自己的'UIView'類,並且你希望'MyOwnUIView'實現'PrepareForReuse()'方法,你需要做'MyOwnUIView:UIView,NIRecyclableViewProtocol'和你可以在你的類 – dalexsoto
實現上覆蓋'PrepareForReuse()',這樣你就可以將自己的邏輯添加到實現中,所以現在當dequeueReusableViewWithIdentifier在objective-c端被調用時'看看dequeueReusableViewWithIdentifier' [這裏](https: //github.com/jverkoey/nimbus/blob/master/src/core/src/NIViewRecycler.m#L82)它會檢查你的對象MyOwnUIView' resp 「prepareForReuse」消息,因爲你做了,它會調用它[這裏](https://github.com/jverkoey/nimbus/blob/master/src/core/src/NIViewRecycler.m#L83)。希望我回答你的問題。亞歷克斯 – dalexsoto