2016-06-10 3 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"]; 

참고 :초보기 이것이 내가

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


} 

이와 당신의 도움을 희망 첫 번째보기 컨트롤러에서 내 두 번째 뷰 컨트롤러를 팝업 방식입니다 UIPopoverpresentationController

로 나타납니다.

+0

왜 사용자 지정 대리인을 사용하지 않습니까? – Mahesh

+0

nsuserdefault를 사용하여이 작업을 수행하고 싶습니다. 가능하지 않습니다. –

+0

예 가능합니다. 내 대답을 확인하십시오. – Mahesh

답변

1

참고 : 여기서는 어떤 단편도 사용하지 않았습니다. 내가

에게 FirstViewController.h

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


@end 

FirstViewController.m을보기 컨트롤러를 시작하면 SEGUE 사용하려면

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

:에서 여기 갱신 값을 호출하는

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

이것은 나를 위해 작동하지 않습니다. 참고 : 첫 번째보기의 viewwillappear 또는 viewdidappear 메서드는 두 번째보기에서 첫 번째보기로 올 때 발생하지 않습니다. –

+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

코드를 추가했습니다. –

관련 문제