2016-06-10 57 views
1

我有兩個視圖在我的app.in第一個視圖中有一個標籤,我想更新它的值在我的第二個視圖控制器(這顯示爲一個彈出視圖)。並且在第二個視圖控制器解除後,更改的值應該位於標籤中(如lebel.text)。我用NSUserDefault如何在iOS中更新以前的視圖標籤NSUserDefault值,目標c

在我的第二個視圖控制器我分配值是這樣的:

- (IBAction)updatetheDatepicker:(id)sender 
{ 
    NSDate *flightDeparturedate = self.flightDepartureDatepicker.date; 
    NSDateFormatter *flightdepatureFormatter = [[NSDateFormatter alloc] init]; 
    [flightdepatureFormatter setDateFormat:@"d/MM/y"]; 
    NSString *flightDeparturedateDisplay = [flightdepatureFormatter stringFromDate:flightDeparturedate]; 

    NSLog(@"selected departure date :%@", flightDeparturedateDisplay); 
    [[NSUserDefaults standardUserDefaults] setObject:flightDeparturedateDisplay forKey:@"flightDepartureDate"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 

,在我firstviewcontroller當第二種觀點辭退,我想更新的標籤,我的第一view.how我能做到這一點。

self.depdate.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"flightDepartureDate"]; 

注:秒視圖顯示爲UIPopoverpresentationController

我這是怎麼彈出我的第二個視圖控制器從第一視圖控制器

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    NSString *identifier = segue.identifier; 
    if([identifier isEqualToString:@"popover"]) 
    { 
     UIViewController *destinationController = segue.destinationViewController; 
     UIPopoverPresentationController *popController = destinationController.popoverPresentationController; 
     if(popController) 
     { 
      popController.delegate = self; 
     } 
    } 

    if([identifier isEqualToString:@"popoverone"]) 
    { 
     UIViewController *destinationController = segue.destinationViewController; 
     UIPopoverPresentationController *popController = destinationController.popoverPresentationController; 
     if(popController) 
     { 
      popController.delegate = self; 
     } 
    } 
} 


- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller 
{ 
    return UIModalPresentationNone;; 


} 

希望這個你有所幫助。

+0

爲什麼不使用自定義委託? – Mahesh

+0

我想用nsuserdefault來做到這一點,是不是可能的 –

+0

是的,這是可能的。檢查我的答案。 – Mahesh

回答

1

注意:在這裏我沒有使用任何segue。我發起視圖控制器

FirstViewController.h

@interface FirstViewController : UIViewController<UIPopoverPresentationControllerDelegate> 
@property(nonatomic,strong)IBOutlet UILabel *depdate; 


@end 

FirstViewController.m

-(void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    [self updateDateLable]; 

} 

- (IBAction)btnClicked:(id)sender 
{ 

    //[self performSegueWithIdentifier:@"openDatePicker" sender:self]; 
    UIButton *btnInfo=(UIButton *)sender; 
    DatePickerPopUpViewController* popOverFileProperty = [[self storyboard] instantiateViewControllerWithIdentifier:@"DatePickerPopUpViewController"]; 

    popOverFileProperty.modalPresentationStyle = UIModalPresentationPopover; 
    popOverFileProperty.popoverPresentationController.sourceView = btnInfo; 
    popOverFileProperty.popoverPresentationController.delegate=self; 
    [self presentViewController:popOverFileProperty animated:YES completion:nil]; 


} 


-(void)updateDateLable 
{ 
    if ([[NSUserDefaults standardUserDefaults] objectForKey:@"flightDepartureDate"] != nil) { 
     self.depdate.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"flightDepartureDate"]; 
    } 
    else 
    { 
     //date is not set yet , set other text as you wish 
     [email protected]"Date not selected"; 
    } 
} 


// Called on the delegate when the user has taken action to dismiss the popover. This is not called when the popover is dimissed programatically. 
- (void)popoverPresentationControllerDidDismissPopover:(UIPopoverPresentationController *)popoverPresentationController 
{ 
    [self updateDateLable]; 
} 

如果你想使用Segue公司:

- (IBAction)btnClicked:(id)sender 
{ 

    [self performSegueWithIdentifier:@"openDatePicker" sender:self]; 

} 

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 

    if ([segue.identifier isEqualToString:@"openDatePicker"]) 
    { 
     DatePickerPopUpViewController* popOverFileProperty = [segue destinationViewController]; 
     popOverFileProperty.modalPresentationStyle = UIModalPresentationPopover; 
     popOverFileProperty.popoverPresentationController.delegate=self; 

    } 
} 
+0

這不適合我。注意:當我從第二個視圖到第一個視圖 –

+0

非常感謝 –

+0

uipopovercontroller從iOS 9.0棄用,這就是爲什麼我用另一種方式 –

0

嘗試從這裏打電話給你的更新值NSUserDefaults的。

-(void)viewWillAppear:(BOOL)animated 
{ 
[super viewWillAppear:animated]; 

if ([[NSUserDefaults standardUserDefaults] objectForKey:@"flightDepartureDate"] != nil||![[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"flightDepartureDate"]] isEqualToString:@"(null)"]||![[NSString stringWithFormat:@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"flightDepartureDate"]] isEqualToString:@""]) { 
    self.lbl.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"flightDepartureDate"]; 
} 
else 
    [email protected]"NO Date.."; 

} 
+0

這不適合我。 'NOTE':第一視圖的viewwillappear或viewdidappear方法在我從第二視圖到第一視圖時不會觸發 –

+0

好的,你能告訴我你是如何彈出你的視圖的。只需在這裏粘貼代碼。 –

+0

我添加了代碼 –