2011-08-06 170 views
0

在我的應用程序中,我有一個包含一些textField的nib文件(視圖A)。在日期前的textField我已經把按鈕按到日曆視圖。我使用的代碼iPhone應用程序類視圖問題

-(IBAction)cal:(id)sender 
{ 
    CalendarTestViewController *calander1=[[CalendarTestViewController alloc]initWithNibName:nil bundle:nil]; 
    [self.navigationController pushViewController:calander1 animated:NO ]; 
    [calander1 release]; 
} 

也就是說fine.It帶我到日曆視圖和日曆視圖我已經寫了代碼,這樣,當有人點擊一個日期會自動移動到以前的觀點,即鑑於A.然後,當有人按A中的一個按鈕,它會帶您確認視圖(另一個類)。它清除textField中的所有數據。

我在想,而不是使用

[self.navigationController pushViewController:calander1 animated:NO ]; 

是否有任何其他的方式來完成這種行爲。我想保存我的數據以進行確認視圖。

這是我的日曆查看水龍頭方法。

- (void)calendarView:(KLCalendarView *)calendarView tappedTile:(KLTile *)aTile 
{ 
    // NSLog(@"Date Selected is %@",[aTile date]); 

    if (cat==nil) { 
     cat=[[FormController alloc]initWithNibName:nil bundle:nil]; 
     NSString *st=[[NSString alloc] initWithFormat:@"%@",[aTile date]]; 
     cat.mas=st; 

     [self.navigationController pushViewController:cat animated:YES]; 
     [cat release]; 

     [self dismissModalViewControllerAnimated:YES]; 

} 
} 

從日曆按任意時間後,我想填補文本框日返回n以前的觀點 我不希望把導航堆棧這個日曆視圖。


經過一些更改:下面是我的CalendarTestViewController.m文件的tap tile方法。

- (void)calendarView:(KLCalendarView *)calendarView tappedTile:(KLTile *)aTile 
{ 
    // NSLog(@"Date Selected is %@",[aTile date]); 

    if (cat==nil) { 
     cat=[[FormController alloc]initWithNibName:nil bundle:nil]; 
     NSString *st=[[NSString alloc] initWithFormat:@"%@",[aTile date]]; 
     cat.mas=st; 

     //[self.navigationController pushViewController:cat animated:YES]; 
     //[cat release]; 

     [self dismissModalViewControllerAnimated:YES]; 
} 
} 

FormController.m

- (void)calendarDidSelectDate:(NSDate *)selectedDate 
{ 
    cali.text=mas; 
    // set the selectedDate wherever it needs to be... 
} 


-(IBAction)cal:(id)sender 
{ 
    CalendarTestViewController *calendar1=[[CalendarTestViewController alloc]initWithNibName:nil bundle:nil]; 

    calendar1.delegate = self; 

    [self.navigationController presentModalViewController:calendar1 animated:YES]; 

} 

的建議意味着協議和委託定義同樣的方式我也做exactily相同。沒有顯示錯誤,但日期沒有被選擇,也沒有被填充在formController的label.text中

回答

1
[self.navigationController presentModalViewController:calander1 animated:YES]; 

默認情況下,這將使您的日曆視圖從底部開始。如果你想讓它淡入淡出,您可以設置:

calendar1.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; 

,或者你可以把它通過設置翻轉:

calendar1.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 

您需要BTW呈現視圖控制器之前調用此setter。此外,以模態方式呈現此日曆視圖控制器意味着您必須以模態方式解除它,而不是將其從navigationController彈出。

[self dismissModalViewControllerAnimated:YES]; 

編輯

給所選日期回你的FormController,你需要聲明你CalendarTestViewController內部的委託協議。^ h

@protocol CalendarTestViewControllerDelegate 

- (void)calendarDidSelectDate:(NSDate *)selectedDate; 

@end 

這告訴你的編譯器的代表將必須實現方法命名calendarDidSelectDate:

然後,你需要給你的CalendarTestViewController委託財產,也在裏面.H,右邊的最後@end

@property (nonatomic, assign) id<CalendarTestViewControllerDelegate> delegate; 

這意味着你有一個符合你在上面聲明的CalendarTestViewControllerDelegate協議的任何類的屬性(這是id的代表),並且該屬性被稱爲委託。在右下@impelementation線的CalendarTestViewController.m文件,你必須把:

@synthetize delegate; 

現在你FormController.h在那說@interface FormController : UITableViewController你需要添加<CalendarTestViewControllerDelegate>告訴編譯器這個類將符合線該協議。現在,所有剩下要做的就是在你的-(IBAction)cal:(id)sender方法添加calendar1.delegate = self;和地方落實內部FormController.m委託方法

- (void)calendarDidSelectDate:(NSDate *)selectedDate 
{ 
    // set the selectedDate wherever it needs to be... 
} 

EDIT2

你需要更換:

- (void)calendarView:(KLCalendarView *)calendarView tappedTile:(KLTile *)aTile{ 
// NSLog(@"Date Selected is %@",[aTile date]); 

if (cat==nil) { 
    cat=[[FormController alloc]initWithNibName:nil bundle:nil]; 
     NSString *st=[[NSString alloc] initWithFormat:@"%@",[aTile date]]; 
    cat.mas=st; 

    // [self.navigationController pushViewController:cat animated:YES]; 
    //[cat release]; 

    [self dismissModalViewControllerAnimated:YES]; 

} 

與例如:

- (void)calendarView:(KLCalendarView *)calendarView tappedTile:(KLTile *)aTile 
{ 
    [self.delegate calendarDidSelectDate:[aTile date]]; 
    [self dismissModalViewControllerAnimated:YES]; 
} 

和:

- (void)calendarDidSelectDate:(NSDate *)selectedDate 
{ 
    cali.text=mas; 
    // set the selectedDate wherever it needs to be... 
} 

有:

- (void)calendarDidSelectDate:(NSDate *)selectedDate 
{ 
    cali.text = [NSString stringWithFormat:@"%@", selectedDate]; 
} 
+0

我同意你的建議。好吧,它會呈現我的日曆視圖。但是當我在日曆視圖中選擇我的日期時,我想回到原始視圖。所以我應該怎麼做在這種方法 – Mann

+0

我已經做了同樣的建議,但現在我不能從我的日曆視圖中選擇任何日期。它不允許我只是沒有發生任何事情。當我選擇日期時,它會自動填充textField數據n消失 – Mann

+0

正如我所說的,當您在日曆視圖中選擇日期時,應該以模態方式解除視圖控制器(請參閱上面我的答案中的最後一行代碼)。關於填寫文本字段...您需要填寫您選擇日期的前一個視圖中的文本字段?你是否實施了某種委託方法或通知,還是你需要幫助? –

1

您可以使用UIActionSheet在UIActionSheet中顯示日曆視圖或UIPickerView。這會佔用一半的屏幕,並且可以使用

[myActionSheet showInView:self.view]; 

它添加到視圖如果你不喜歡它,你可以只顯示modalViewController並關閉它選擇一個日期之後。

+0

好吧,我會看這兩者的概念,但將它與我的日曆以及工作。在日曆課上的方法,在處理日期的錄音和返回到前一個視圖的方法? – Mann

+0

他有日曆的自定義視圖,所以UIPickerView(或更具體的UIDatePicker)不是一個真正的選項,並且UIActionSheet絕對不是一個選項。呈現該視圖控制器模態地聽起來像是唯一正確的方式,而不是將其推到導航控制器上。 –