开发者

Should I use IB or Subclass UIView

So, I developed a kind of drop down button class.

Let's call it DDButton. I mainly export one function :

-(void) addButtonWithImage:(UIImage*)image andTarget:(id)target andSelector:(SEL)selector

which lets the user a开发者_JS百科dd another button to the drop down.

I will need to use DDButton in different screens of my app.

I would like to use it like:

DDButton* ddb = [[DDButton alloc] initWithFrame:rect];
[ddb addButtonWithImage....]
[ddb addButtonWithImage....]

My question is since I never subclassed UIView before how should I implement it, and how should I use it later ?

Do I use IB and create a stub UIView which I'll connect to the DDButton in the Identity Pane ? if so , how exactly I instantiate the view later on.

Or, Do I subclass UIView ? if so , what methods I should override ? Do you I setup my buttons in the initializer ? in LayoutSubView ? In drawRect ?

I would love to hear the best approach here. Thanks!

Edit

Let's say I choose the IB way : I have a main button which I set regardless of the addButtonWithImage() calls, actually all calls to addButtonWithImage just "append" to that button. I want to main button to be the size of the view, until other buttons are added and then the view grows appropriately. However, I want the size of the view to be chosen by the user at first...using setFrame I guess. Meaning in the awakeFromNib I can't count on the frame size yet (it only take the xib size I assume). So where would I setup my main button ? LayoutSubView ? setFrame ? I'm not sure.


Add your view to the interface in IB as a UIView, then change the class in the identity pane. If you need to do initialization in code, use a -(void)awakeFromNib method. I would suggest setting up the buttons when they are added in addButtonWithImage....


I'd probably do a subclass, building views in code is a good thing to learn.

Override drawrect: to do any custom drawing you need to do, if you're just adding a UIImageview or something and doing positioning you could just override initWith...: and do your custom initialisations.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜