views:

50

answers:

2

Hello

I have the following code to create a view and put it in scrollview to allow paging
the code works fine however what I couldn't do is loading views from a nib file

in other words I want to use "initWithNibName" instead of "initWithFrame"?

   - (void)createPageWithColor:(UIColor *)color forPage:(int)page
     {
     UIView *newView = [[UIView alloc] initWithFrame:CGRectMake(0, 300,400)];
         newView.backgroundColor = color;
     [scrollView addSubview:newView];
    }

Thanks alot

+1  A: 

Try something like this (adapted from "The iPhone Developers Cookbook", pg. 174):

UIView *newView = [[[NSBundle mainBundle] loadNibNamed:@"yournib" owner:self options:nil] lastObject];

This assumes a single view object in your .xib, but you could modify it if your .xib is more complicated.

John N
Great John, but I need to specify the position of the newView because I am adding it to a scrollview
ahmed
Commented about something @John N missed but I missed that he HADN'T missed it. So never mind!
Dan Ray
+1  A: 

I think the thing you're missing is that you can set the frame of your new UIView after loading the nib. Load/Init time isn't your only shot at that. I'm also breaking the load function into its pieces, in the code below, so you can see more easily what's going on.

Observe:

NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"yournib" 
                                                     owner:self 
                                                   options:nil];
//I'm assuming here that your nib's top level contains only the view 
//you want, so it's the only item in the array.
UIView *myView = [nibContents objectAtIndex:0];
myView.frame = CGRectMake(0,0,300,400); //or whatever coordinates you need
[scrollview addSubview:myView];

Don't forget that for that UIScrollView to actually scroll, you need to set its contentSize property to the size of the goods inside it, which is likely bigger than the .frame property of the scroll view itself.

Dan Ray
Thats what I am talking about :) Thank you Dan, your solution works perfectly, yes I have changed the positions of the views on the scrollview with something like "scrollView.frame.size.width * page" for the x coordinatorThanks again, you made my day :)
ahmed