2010-05-12 8 views
0

Je suis en train de plonger dans le développement de l'iPad et j'apprends encore comment tout fonctionne ensemble. Je comprends comment ajouter une vue standard (boutons, vues de table, datepicker, etc.) à mon interface utilisateur en utilisant Xcode et Interface Builder, mais maintenant j'essaie d'ajouter un contrôle de calendrier personnalisé (TapkuLibrary) à la fenêtre gauche de mon UISplitView application qui n'implique pas Interface Builder, non? Donc, si j'ai une vue personnalisée (dans ce cas, le TKCalendarMonthView), comment puis-je l'ajouter par programmation à l'une des vues dans mon interface utilisateur (dans ce cas, le RootViewController)? Voici quelques extraits de code pertinents de mon projet ...Comment ajouter une vue personnalisée à l'interface utilisateur de l'application iPhone?

interface RootViewController

@interface RootViewController : UITableViewController <NSFetchedResultsControllerDelegate> { 

    DetailViewController *detailViewController; 

    NSFetchedResultsController *fetchedResultsController; 
    NSManagedObjectContext *managedObjectContext; 
} 

@property (nonatomic, retain) IBOutlet DetailViewController *detailViewController; 

@property (nonatomic, retain) NSFetchedResultsController *fetchedResultsController; 
@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext; 

- (void)insertNewObject:(id)sender; 

interface TKCalendarMonthView

@class TKMonthGridView,TKCalendarDayView; 
@protocol TKCalendarMonthViewDelegate, TKCalendarMonthViewDataSource; 


@interface TKCalendarMonthView : UIView { 

    id <TKCalendarMonthViewDelegate> delegate; 
    id <TKCalendarMonthViewDataSource> dataSource; 

    NSDate *currentMonth; 
    NSDate *selectedMonth; 
    NSMutableArray *deck; 


    UIButton *left; 
    NSString *monthYear; 
    UIButton *right; 

    UIImageView *shadow; 
    UIScrollView *scrollView; 


} 
@property (readonly,nonatomic) NSString *monthYear; 
@property (readonly,nonatomic) NSDate *monthDate; 
@property (assign,nonatomic) id <TKCalendarMonthViewDataSource> dataSource; 
@property (assign,nonatomic) id <TKCalendarMonthViewDelegate> delegate; 

- (id) init; 
- (void) reload; 
- (void) selectDate:(NSDate *)date; 

de Merci à l'avance pour votre aide! J'ai encore beaucoup à apprendre, alors je m'excuse si la question est absurde de quelque façon que ce soit. Je vais continuer à faire des recherches sur cette question maintenant!

Répondre

3

En supposant que vous avez initialisé le UIView personnalisé, vous devez l'ajouter en tant que sous-vue de la vue viewController.

- (void)addSubview:(UIView *)view

Ainsi, un exemple serait si vous avez une plaine viewController appelée myVC, qui a simplement un UIView blanc blanc comme son point de vue, vous dites ceci:

CGRect customViewsFrame = CGRectMake(10, 30, 5, 2); 
MyCustomView *myView = [[MyCustomView alloc] initWithFrame:customViewsFrame]; 
[[myVC view] addSubview:myView]; 
[myView release]; //Since you called "alloc" on this, you have to release it too 

Ensuite, il montrera dans la vue viewController, en prenant l'espace indiqué par le CGRect.

Les coordonnées de CGRect spécifient un emplacement dans le système de coordonnées local de l'aperçu que vous ajoutez à, si je ne me trompe pas.

CGRect CGRectMake (CGFloat x, CGFloat y, CGFloat width, CGFloat height);

+0

Merci, Chris! Ça a du sens. Comment puis-je le positionner dans la vue parente? Est-ce que c'est quelque chose que je fais pendant l'initialisation de la vue personnalisée? – BeachRunnerFred

+0

Ok. Voir ma réponse éditée dans une minute. –

+0

Génial, merci beaucoup! Je vais jouer avec ça. – BeachRunnerFred

1

Je ne suis pas démarré sous Mac OS X je ne peux pas vérifier cela complètement, mais ceci est votre modèle général:

RootViewController.h:

... 
@interface RootViewController : UITableViewController <NSFetchedResultsControllerDelegate> 
{ 
    ... 
    TKCalendarMonthView* calendarView; 
    ... 
} 
... 
@property (nonatomic, retain) TKCalendarMonthView* calendarView; 
... 

RootViewController .m:

... 
@synthesize calendarView; 
... 
- (void)dealloc 
{ 
    ... 
    [calendarView release]; 
    ... 
} 
... 
- (void)viewDidLoad 
{ 
    ... 
    TKCalendarMonthView* aCalendarView = [[TKCalendarMonthView alloc] init]; // <-- possibly initWithFrame here 
    self.calendarView = aCalendarView; 
    [aCalendarView release]; 
    [self addSubview:self.calendarView]; 
    ... 
} 
+0

merci beaucoup, ça aide beaucoup! – BeachRunnerFred