2010-05-12 80 views
0

我正在潛入iPad的發展,我仍然在學習如何一起工作。我知道如何使用Xcode和Interface Builder將標準視圖(即按鈕,tableviews,datepicker等)添加到我的用戶界面,但現在我試圖將自定義日曆控件(TapkuLibrary)添加到我的UISplitView左窗口中不涉及Interface Builder的應用程序,對吧?所以,如果我有一個自定義視圖(在這種情況下,TKCalendarMonthView),我如何以編程方式將其添加到我的用戶界面(在這種情況下,RootViewController)的視圖之一?下面是一些相關的代碼片段從我的項目...如何將自定義視圖添加到iPhone應用的用戶界面?

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; 

預先感謝您的幫助!我仍然有很多要學習,所以我很抱歉,如果這個問題在任何方面都是荒謬的。我現在要繼續研究這個問題!

回答

3

假設您已初始化自定義UIView,則需要將其添加爲viewController的視圖的子視圖。

- (void)addSubview:(UIView *)view

所以,如果你有一個普通的viewControllermyVC,其中有一個簡單的空白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);

+0

謝謝,克里斯!這就說得通了。我如何將它放在父視圖中?這是我在自定義視圖初始化過程中做的事嗎? – BeachRunnerFred 2010-05-12 23:36:54

+0

好的。在一分鐘內看到我編輯的答案。 – 2010-05-12 23:38:31

+0

太棒了,非常感謝!我會玩弄它。 – BeachRunnerFred 2010-05-12 23:53:41

1

我沒有啓動到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]; 
    ... 
} 
+0

非常感謝你,這有助於很多! – BeachRunnerFred 2010-05-12 23:54:05

相關問題