2013-01-24 106 views
0

我有一種情況,ClassA包含UIView屬性。我有兩個孩子ClassA,ChildA和ChildB,都爲UIView屬性設置了兩個不同類型的UIView子類。我想要求這兩個UIView子類都有一個名爲maximumDimension的屬性,然後我希望能夠使用它自己的UIView屬性在ClassA中進行設置。需要Objective-C設計幫助,需要協議嗎?

完成此操作的最佳方法是什麼?它會是一個協議嗎?如果是的話,那麼有人能夠提供關於如何在Objective-C中實現的代碼?

+0

你對ClassA的孩子有什麼意義?子類?或者是ClassA某種節點? – DrummerB

+0

你爲什麼不在超類中實現呢?孩子們的UIView類如此不同? – iluvcapra

+0

@DrummerB我假設他們是UIView的兩個不同的子類。 – 2013-01-24 18:33:46

回答

3

它會是一個協議嗎?

是:

@protocol Foo <NSObject> 
@property (nonatomic, assign) int maximumDimensions; // wild guess to type from name 
@end 

然後實際的屬性:

@property (nonatomic, strong) id <Foo> bar; 
+1

類別也可以在這裏工作:'@interface UIView(MaxDimensions)@property(nonatomic,只讀)CGSize maxDimensions;儘管它不太「正統」。 – nielsbot

+0

@nielsbot我相信這是另一種方式。 OP詢問在班級中應該如何申報,要求其財產擁有特定的財產,而不是如何在實際的具體班級上實施。 – 2013-01-24 18:43:43

+0

謝謝。那麼我最終會將酒吧設置爲A類的UIView屬性,還是可以成爲UIView? –

2

爲了討論的緣故,這裏是一個使用特定類別的協議,延長UIViewmaximumDimensions的解決方案財產:

的UIView + MaximumDimensions.h

@interface UIView (MaximumDimensions) 
@property (nonatomic, readonly) CGSize maximumDimensions ; 
@end 

的UIView + MaximumDimensions.m

@implementation UIView (MaximumDimensions) 
-(CGSize)maximumDimensions { return self.bounds.size ; } 
@end 

現在,在ClassA的方法,你可以訪問self.view.maximumDimensions。 (因爲UIView現在有一個maximumDimensions屬性。)您的子類UIView,ChildAChildB可以實現-maximumDimensions以返回正確的答案。

+0

好想法把它投了票。 –