보기 사이의 이동으로 데이터 리셋을 완성하는 세 가지 방법

10111 단어
보기 마스터에서 보기 데이터로 넘어가 데이터 보기에서 데이터를 준비한 다음에 데이터 보기에서 마스터 보기로 돌아간다. 이때 데이터 보기에서 준비한 데이터를 마스터 보기로 되돌려야 한다. 이때 세 가지 방법이 있다.
방법 1: 전역 변수 사용
Master View Controller를 글로벌 변수로 설정하여 Data View Controller에서 직접 액세스합니다.
먼저 AppDelegate를 프로그램에서 위임합니다.h에서 글로벌 변수를 선언합니다.
 
#import <UIKit/UIKit.h>

#import "Global_MasterViewController.h"

#import "Property_MasterViewController.h"

#import "Delegate_MasterViewController.h"



@interface AppDelegate : UIResponder <UIApplicationDelegate>



@property (strong, nonatomic) UIWindow *window;



@property (strong, nonatomic) UITabBarController *tbc;



@property (strong, nonatomic) Global_MasterViewController *g_mVC; //  



@end

그리고 글로벌...MasterViewController 클래스:
 
 
- (void)viewDidLoad

{

    [super viewDidLoad];

    

    //  

    self.navigationItem.title = @"Global";

    

    // Modal , Data 

    CGRect rect = CGRectMake(120.0, 230.0, 80.0, 40.0);

    self.modal_button = [UIButton buttonWithType:UIButtonTypeSystem];

    self.modal_button.frame = rect;

    [self.modal_button setTitle:@"Modal" forState:UIControlStateNormal];

    [self.modal_button addTarget:self action:@selector(modalToDataView:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:self.modal_button];

    

    // data , data 

    rect = CGRectMake(100.0, 300.0, 120.0, 40.0);

    self.data_label = [[UILabel alloc] initWithFrame:rect];

    self.data_label.textAlignment = NSTextAlignmentCenter;

    [self.view addSubview:self.data_label];

}



//  Data 

-(void)modalToDataView:(id)sender

{

    Global_DataViewController *g_dVC = [[Global_DataViewController alloc] init];

    g_dVC.modalTransitionStyle = UIModalTransitionStyleCoverVertical;

    [self presentViewController:g_dVC animated:YES completion:nil];

}

이 보기에는modal 단추가 있습니다. 누르면 Data 보기로 이동합니다. Data 보기에는 텍스트 입력 상자가 있습니다.
 
이 보기의 데이터 탭은 데이터 보기에서 입력한 데이터를 표시하는 데 사용됩니다.이어서 글로벌...DataViewController 클래스:
 
- (void)viewDidLoad

{

    [super viewDidLoad];

    

    //  , 

    self.tf = [[UITextField alloc] initWithFrame:CGRectMake(100.0, 200.0, 120.0, 100.0)];

    self.tf.placeholder = @"Input some text";

    [self.view addSubview:self.tf];

    

    // Dismiss ,dismiss 

    self.dismiss_button = [UIButton buttonWithType:UIButtonTypeSystem];

    self.dismiss_button.frame = CGRectMake(130.0, 320.0, 60.0, 40.0);

    [self.dismiss_button setTitle:@"Dismiss" forState:UIControlStateNormal];

    [self.dismiss_button addTarget:self action:@selector(modalBack:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:self.dismiss_button];

}



//  Master , 

-(void)modalBack:(id)sender

{

    AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; //  appDelegate g_mVC

    appDelegate.g_mVC.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;

    [self dismissViewControllerAnimated:YES completion:^{

        appDelegate.g_mVC.data_label.text = self.tf.text; //  g_mVC 

    }];

}

 
방법2: 데이터 구성원 사용
Master View Controller를 Data View Controller의 구성원 변수로 설정한 다음 Data View Controller에서 액세스할 수 있습니다.
먼저 Master View Controller 클래스가 Data View Controller 클래스인 구성원 변수를 설정합니다.
 
@interface Property_DataViewController : UIViewController



@property (strong, nonatomic) UIButton *dismiss_button;



@property (strong, nonatomic) UITextField *tf;



@property (strong, nonatomic) Property_MasterViewController *p_mVC; //  Master Data 



@end

다음 PropertyMasterViewController 클래스:
 
- (void)viewDidLoad

{

    [super viewDidLoad];

    

    //  

    self.navigationItem.title = @"Property";

    

    // Modal , Data 

    CGRect rect = CGRectMake(120.0, 230.0, 80.0, 40.0);

    self.modal_button = [UIButton buttonWithType:UIButtonTypeSystem];

    self.modal_button.frame = rect;

    [self.modal_button setTitle:@"Modal" forState:UIControlStateNormal];

    [self.modal_button addTarget:self action:@selector(modalToDataView:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:self.modal_button];



    // data , data 

    rect = CGRectMake(100.0, 300.0, 120.0, 40.0);

    self.data_label = [[UILabel alloc] initWithFrame:rect];

    self.data_label.textAlignment = NSTextAlignmentCenter;

    [self.view addSubview:self.data_label];

}



//  Data 

-(void)modalToDataView:(id)sender

{

    Property_DataViewController *p_dVC = [[Property_DataViewController alloc] init];

    p_dVC.modalTransitionStyle = UIModalTransitionStyleCoverVertical;

    [self presentViewController:p_dVC animated:YES completion:^{

        p_dVC.p_mVC = self; //  Data master self

    }];

}

 Data master self。

 Property_DataViewController :

- (void)viewDidLoad

{

    [super viewDidLoad];

    

    //  , 

    self.tf = [[UITextField alloc] initWithFrame:CGRectMake(100.0, 200.0, 120.0, 100.0)];

    self.tf.placeholder = @"Input some text";

    [self.view addSubview:self.tf];

    

    // Dismiss ,dismiss 

    self.dismiss_button = [UIButton buttonWithType:UIButtonTypeSystem];

    self.dismiss_button.frame = CGRectMake(130.0, 320.0, 60.0, 40.0);

    [self.dismiss_button setTitle:@"Dismiss" forState:UIControlStateNormal];

    [self.dismiss_button addTarget:self action:@selector(modalBack:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:self.dismiss_button];

}

                                                                                                                                                          //  Data 

-(void)modalBack:(id)sender{

self.p_mVC.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 

[self dismissViewControllerAnimated:YES completion:^{ self.p_mVC.data_label.text = self.tf.text; //  self.p_mVC  }];}

 
방법3: 사용 의뢰는 마스터 보기 컨트롤러가 Data 보기 컨트롤러의 데이터를 사용하기 때문에 Data 보기 컨트롤러에서 의뢰를 성명한 다음에 마스터 보기 컨트롤러는 의뢰를 실현하는 방법을 통해 Data 보기 컨트롤러에서 데이터를 직접 얻을 수 있다.먼저 Data 뷰에서 위임된 선언 섹션을 살펴보십시오.
 
//  

@protocol DataCallBackDelegate <NSObject>

-(void)willDismissModalView:(id)sender;

@end



@interface Delegate_DataViewController : UIViewController



@property (strong, nonatomic) UIButton *dismiss_button;



@property (strong, nonatomic) UITextField *tf;



@property (weak, nonatomic) id<DataCallBackDelegate> dataDelegate; //  , weak , retain cycle



@end

그리고 Delegate.MasterViewController의 인터페이스 섹션:
@interface Delegate_MasterViewController : UIViewController <DataCallBackDelegate> // confirm to DataCallBackDelegate



@property (strong, nonatomic) UIButton *modal_button;



@property (strong, nonatomic) UILabel  *data_label;



@end


구현 섹션:
- (void)viewDidLoad

{

    [super viewDidLoad];

    

    //  

    self.navigationItem.title = @"Delegate";

    

    // Modal , Data 

    CGRect rect = CGRectMake(120.0, 230.0, 80.0, 40.0);

    self.modal_button = [UIButton buttonWithType:UIButtonTypeSystem];

    self.modal_button.frame = rect;

    [self.modal_button setTitle:@"Modal" forState:UIControlStateNormal];

    [self.modal_button addTarget:self action:@selector(modalToDataView:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:self.modal_button];

    

    // data , data 

    rect = CGRectMake(100.0, 300.0, 120.0, 40.0);

    self.data_label = [[UILabel alloc] initWithFrame:rect];

    self.data_label.textAlignment = NSTextAlignmentCenter;

    [self.view addSubview:self.data_label];

}



//  Data 

-(void)modalToDataView:(id)sender

{

    Delegate_DataViewController *d_dVC = [[Delegate_DataViewController alloc] init];

    d_dVC.modalTransitionStyle = UIModalTransitionStyleCoverVertical;

    d_dVC.dataDelegate = self; //  Data self

    [self presentViewController:d_dVC animated:YES completion:nil];

}



- (void)didReceiveMemoryWarning

{

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}



#pragma mark -

#pragma mark Data call back delegate



//  

-(void)willDismissModalView:(id)sender

{

    Delegate_DataViewController *d_dVC = (Delegate_DataViewController *)sender;

    self.data_label.text = d_dVC.tf.text; //  self 

}


마지막으로 DelegateDataViewController 클래스:
- (void)viewDidLoad

{

    [super viewDidLoad];

    

    //  , 

    self.tf = [[UITextField alloc] initWithFrame:CGRectMake(100.0, 200.0, 120.0, 100.0)];

    self.tf.placeholder = @"Input some text";

    [self.view addSubview:self.tf];

    

    // Dismiss ,dismiss 

    self.dismiss_button = [UIButton buttonWithType:UIButtonTypeSystem];

    self.dismiss_button.frame = CGRectMake(130.0, 320.0, 60.0, 40.0);

    [self.dismiss_button setTitle:@"Dismiss" forState:UIControlStateNormal];

    [self.dismiss_button addTarget:self action:@selector(modalBack:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:self.dismiss_button];

}



//  Master , 

-(void)modalBack:(id)sender

{

    [self dismissViewControllerAnimated:YES completion:^{

        [self.dataDelegate willDismissModalView:self]; //  

    }];

}


이것은 비교적 특별하다. 위탁의 호출과 실현을 분리한다.이 예제에서는 Data View Controller에서 위임 메서드를 호출합니다.
//  Master , 

-(void)modalBack:(id)sender

{

    [self dismissViewControllerAnimated:YES completion:^{

        [self.dataDelegate willDismissModalView:self]; //  

    }];

}


구현은 Master View Controller에서 수행됩니다.
//  

-(void)willDismissModalView:(id)sender

{

    Delegate_DataViewController *d_dVC = (Delegate_DataViewController *)sender;

    self.data_label.text = d_dVC.tf.text; //  self 

}


의뢰를self로 설정해야 합니다.데모가 업로드되었으니 다운로드해 보십시오.
 

좋은 웹페이지 즐겨찾기