Как добавить пользовательский вид в пользовательский интерфейс приложения iPhone? - PullRequest
0 голосов
/ 13 мая 2010

Я погружаюсь в разработку iPad и все еще учусь тому, как все работает вместе. Я понимаю, как добавить стандартное представление (то есть кнопки, представления таблиц, указатель даты и т. Д.) В свой пользовательский интерфейс, используя Xcode и Interface Builder, но теперь я пытаюсь добавить настраиваемый элемент управления календарем (TapkuLibrary) в левое окно моего UISplitView приложение, которое не использует Interface Builder, верно? Итак, если у меня есть пользовательское представление (в данном случае, TKCalendarMonthView), как мне программно добавить его к одному из представлений в моем пользовательском интерфейсе (в данном случае, RootViewController)? Ниже приведены некоторые фрагменты кода из моего проекта ...

Интерфейс 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;

Интерфейс 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;

Заранее спасибо за вашу помощь! У меня еще есть куча уроков, поэтому я прошу прощения, если вопрос абсурден. Я собираюсь продолжить исследование этого вопроса прямо сейчас!

Ответы [ 2 ]

3 голосов
/ 13 мая 2010

Если вы инициализировали пользовательский UIView, вам нужно добавить его как подпредставление представления viewController.

- (void) addSubview: (UIView *) представление

Так, например, было бы, если бы у вас была простая viewController с именем myVC, которая имеет просто пустой белый UIView в качестве вида, вы бы сказали это:

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

Тогда он появится на виде viewController, занимая пространство, обозначенное CGRect.

Координаты CGRect указывают местоположение в локальной системе координат суперпредставления, которое вы добавляете к , если я не ошибаюсь.

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

1 голос
/ 13 мая 2010

Я не загружен в Mac OS X, поэтому не могу проверить это полностью, но это ваш общий шаблон:

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];
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...