欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

在 iOS 中如何有效利用多级页面的代理方法

最编程 2024-01-24 19:20:38
...

当然可以。为了提供一个更详细的示例,我将为每个页面(Page1ViewController、Page2ViewController、Page3ViewController 和 Page4ViewController)编写示例代码,以展示如何通过代理模式将数据从 Page4 传递回 Page1。

定义 Page4 的代理协议

首先,定义一个在 Page4ViewController 中使用的代理协议:

// Page4ViewController.h

#import <UIKit/UIKit.h>

@protocol Page4ViewControllerDelegate <NSObject>
- (void)page4ViewControllerDidUpdateValue:(NSString *)value;
@end

@interface Page4ViewController : UIViewController
@property (weak, nonatomic) id<Page4ViewControllerDelegate> delegate;
@end

Page1 实现代理协议

Page1ViewController 需要实现这个代理协议:

// Page1ViewController.h

#import <UIKit/UIKit.h>
#import "Page4ViewController.h"

@interface Page1ViewController : UIViewController <Page4ViewControllerDelegate>
@end

// Page1ViewController.m

#import "Page1ViewController.h"
#import "Page2ViewController.h"

@implementation Page1ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // 配置 Page1ViewController
}

- (void)page4ViewControllerDidUpdateValue:(NSString *)value {
    NSLog(@"Value from Page 4: %@", value);
    // 在这里处理从 Page4 传回的值
}

// 导航到 Page2
- (void)navigateToPage2 {
    Page2ViewController *page2VC = [[Page2ViewController alloc] init];
    page2VC.delegate = self; // 将 Page1 设置为 Page2 的代理
    [self.navigationController pushViewController:page2VC animated:YES];
}

@end

Page2 和 Page3 作为代理中继

在 Page2ViewController 和 Page3ViewController 中,需要将 Page1 作为代理传递给下一个页面:

// Page2ViewController.h

#import <UIKit/UIKit.h>
#import "Page4ViewController.h"

@interface Page2ViewController : UIViewController
@property (weak, nonatomic) id<Page4ViewControllerDelegate> delegate;
@end

// Page2ViewController.m

#import "Page2ViewController.h"
#import "Page3ViewController.h"

@implementation Page2ViewController

// 导航到 Page3
- (void)navigateToPage3 {
    Page3ViewController *page3VC = [[Page3ViewController alloc] init];
    page3VC.delegate = self.delegate; // 将代理传递给 Page3
    [self.navigationController pushViewController:page3VC animated:YES];
}

@end

Page3ViewController 的实现类似,也是将代理传递给 Page4ViewController。

Page4 使用代理传递数据

在 Page4ViewController 中,当需要将数据传回 Page1 时,使用代理方法:

// Page4ViewController.m

#import "Page4ViewController.h"

@implementation Page4ViewController

- (void)updateValueAndNotifyDelegate {
    NSString *updatedValue = @"New Value";
    if ([self.delegate respondsToSelector:@selector(page4ViewControllerDidUpdateValue:)]) {
        [self.delegate page4ViewControllerDidUpdateValue:updatedValue];
    }
    // 其他逻辑处理...
}

@end

这样,当 Page4 更新一个值并需要通知 Page1 时,它就会调用代理方法。由于 Page1、Page2 和 Page3 将代理正确地传递下去,Page1 将能够接收并处理从 Page4 发来的数据。

除了代理,其实还可以用通知或者 block 也可以,不过亲测的话,代理更加高效。

零散知识点,仅做记录!

推荐阅读