2011-08-06 14 views
0

私のアプリケーションでは、いくつかのtextFieldを含むnibファイル(ビューA)があります。 dateFieldFieldの前にカレンダービューにかかるボタンを押します。私はfine.Itビューをカレンダーに私を取り、誰かが日付をタップすると、それは自動的に次に際に、以前のビューすなわちビューAに移動するようにカレンダービューで、私はコードを書いているあるコードiPhoneアプリケーションクラスビューの問題

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

を使用しました誰かがあなたの確認画面(別のクラス)を取るAのボタンを押します。これはtextFields内のすべてのデータをフラッシュします。

私は

[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]; 

} 
} 

カレンダーから任意の時間を押した後、私は、TextFieldに日付を記入したいn個前のビュー に戻る私は、ナビゲーションスタックにこのカレンダービューを入れたいいけません。


いくつか変更を加えた後は、次のようになりました。CalendarTestViewController.mファイルのタップタイルメソッドです。

- (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; 

あなたはところでビューコントローラを提示する前に、このセッターを呼び出す必要があります。また、このカレンダー表示コントローラーをモーダル表示すると、navigationControllerからポップするのではなく、モーダル表示を解除する必要があります。

[self dismissModalViewControllerAnimated:YES]; 

編集

があなたのFormControllerに戻って、選択した日付を与えるために、あなたはあなたのCalendarTestViewController内のデリゲートプロトコルを宣言する必要があります。

はその後も.hの内側に、右の最後の@end

前に、あなたのCalendarTestViewControllerにデリゲート性を付与する必要があります。h

@protocol CalendarTestViewControllerDelegate 

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

@end 

これは、デリゲートは、メソッドの名前calendarDidSelectDateを実装する必要がありますあなたのコンパイラに指示します

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

これは、あなたが上記の宣言CalendarTestViewControllerDelegateプロトコルに準拠する任意のクラスのプロパティ(つまり、idは何の略かだ)を持っていることを意味し、そのプロパティは、デリゲートと呼ばれています。あなたのFormController.hで

@synthetize delegate; 

そして今のあなたは、このクラスが準拠をコンパイラに指示します<CalendarTestViewControllerDelegate>を追加する必要が@interface FormController : UITableViewControllerという行で:右@impelementationラインの下にCalendarTestViewController.mファイルでは、配置する必要がありますそのプロトコル。今、すべてのことは

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

EDIT2をご-(IBAction)cal:(id)sender方法でcalendar1.delegate = self;を追加し、FormController.m内のどこかにデリゲートメソッドを実装している行うには残って

あなたが交換する必要があります。

- (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データを埋めることを希望する – Mann

+0

私が言ったように、あなたはカレンダービューで日付を選択すると、そのビューコントローラをモーダル(上記の私の答えのコードの最後の行を見てください)を却下する必要があります。テキストフィールドを塗りつぶすには...前のビューのテキストフィールドに選択した日付を入力する必要がありますか?あなたは何らかの種類のデリゲートメソッドや通知を実装しましたか、それともあまりにも助けが必要ですか? –

1

UIActionSheetを使用すると、UIActionSheet内にカレンダービューまたはUIPickerViewを表示できます。これは、画面の半分を取るだろうとあなたがそれを好きではない場合、あなただけmodalViewControllerを表示することができます

[myActionSheet showInView:self.view]; 

を使用してビューに追加し、日付が選択された後、それを却下することができます。

+0

[OK]を私は概念の両方を見ていきますが、それは同様に私のカレンダーで動作します。日付のテーピングと前のビューに戻る方法で、カレンダークラスの意味ですか? – Mann

+0

彼はカレンダー用のカスタムビューを持っているので、UIPickerView(またはより具体的にはUIDatePicker)は実際にはオプションではなく、UIActionSheetは確実にオプションではありません。そのビューコントローラをモーダルに提示することは、ナビゲーションコントローラにプッシュする以外の唯一の正しい方法のように聞こえる。 –