ios Delegate 实现 视图之间通信

MyDelete.h

objectivec 复制代码
#import <Foundation/Foundation.h>

@protocol MyDelegate <NSObject>
- (void)didUpdateText:(NSString *)text; // 委托方法
@end

ViewControler.h

objectivec 复制代码
//
//  ViewController.h
//  delegate
//
//  Created by xmkjsoft on 2024/8/12.
//

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

@interface ViewController : UIViewController<MyDelegate>


@end

ViewControler.m

objectivec 复制代码
//
//  ViewController.m
//  delegate
//
//  Created by xmkjsoft on 2024/8/12.
//

#import "ViewController.h"
#import "OtherViewController.h"


@interface ViewController ()


@property (nonatomic, strong) UILabel *label;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
   
    [self loadUI];
      

    
    // 初始化 FirstViewController 并设置代理
    OtherViewController *firstVC = [[OtherViewController alloc] init];
    firstVC.delegate = self; // 设置代理
    
  
}

-(void) loadUI{
    // Set red background color
    self.view.backgroundColor = [UIColor redColor];
    
    // 创建标签以显示接收到的文本
       self.label = [[UILabel alloc] initWithFrame:CGRectMake(50, 200, 300, 50)];
       self.label.textAlignment = NSTextAlignmentCenter;
       [self.view addSubview:self.label];
    
    // 创建按钮以跳转到 OtherViewController
       UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
       [button setTitle:@"打开新视图" forState:UIControlStateNormal];
       button.frame = CGRectMake(100, 300, 200, 50); // 设置按钮的 frame
       [button addTarget:self action:@selector(showOtherViewController) forControlEvents:UIControlEventTouchUpInside];
       [self.view addSubview:button];
}


- (void)showOtherViewController {
    OtherViewController *otherVC = [[OtherViewController alloc] init];
    otherVC.delegate = self; // 设置代理
    [self presentViewController:otherVC animated:YES completion:nil];
}



// 实现代理方法
- (void)didUpdateText:(NSString *)text {
    self.label.text = text; // 更新标签文本
}



@end

OtherViewController.h

objectivec 复制代码
//
//  OtherViewController.h
//  delegate
//
//  Created by xmkjsoft on 2024/8/12.
//

#import <UIKit/UIKit.h>

#import "MyDelegate.h"

NS_ASSUME_NONNULL_BEGIN


@interface OtherViewController : UIViewController
@property (nonatomic, weak) id<MyDelegate> delegate; // 代理属性

@end

NS_ASSUME_NONNULL_END

OtherViewController.m

objectivec 复制代码
//
//  OtherViewController.m
//  delegate
//
//  Created by xmkjsoft on 2024/8/12.
//

#import "OtherViewController.h"
#import "ViewController.h"

@interface OtherViewController ()

@property (nonatomic, strong) UIPanGestureRecognizer *panGestureRecognizer;

@end

@implementation OtherViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 添加手势识别器
       self.panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
       [self.view addGestureRecognizer:self.panGestureRecognizer];

    
    [self loadUI];

    
    
}


- (void)handlePan:(UIPanGestureRecognizer *)gesture {
    CGPoint translation = [gesture translationInView:self.view];
    
    if (gesture.state == UIGestureRecognizerStateChanged) {
        // 检测滑动方向
        if (translation.y < -30) {
            NSLog(@"向上滑动");
            // 在这里处理向上滑动的逻辑
        } else if (translation.y > 30) {
            NSLog(@"向下滑动");
            // 在这里处理向下滑动的逻辑
            if ([self.delegate respondsToSelector:@selector(didUpdateText:)]) {
                               [self.delegate didUpdateText:@"上个视图通过下滑让我变hello,hello"];
                           }
            
            [self closeModal];
        }
    }
}


- (void)closeModal {
    [self dismissViewControllerAnimated:YES completion:^{
        NSLog(@"模态视图已关闭");
    }];
}


- (void) loadUI{
    self.view.backgroundColor = [[UIColor grayColor] colorWithAlphaComponent:0.5];
    UIButton *getOtherViewControllerButton = [UIButton buttonWithType:UIButtonTypeSystem];
    [getOtherViewControllerButton setTitle:@"点我更新上一个视图内容" forState:UIControlStateNormal];
    [getOtherViewControllerButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [getOtherViewControllerButton setBackgroundColor:[UIColor blueColor]];
    [getOtherViewControllerButton.layer setCornerRadius:5.0];
    getOtherViewControllerButton.frame = CGRectMake(100, 100, 200, 50);
    [getOtherViewControllerButton addTarget:self action:@selector(getOtherViewControllerMethod) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:getOtherViewControllerButton];
    
    
    // 创建标签并设置文本
        UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 160, 350, 50)]; // 设置标签位置
        textLabel.textAlignment = NSTextAlignmentCenter; // 文本居中
        textLabel.textColor = [UIColor whiteColor]; // 设置文本颜色
        textLabel.text = @"下滑用代理更新上一个视图的文本为hello"; // 默认文本
        // 将标签添加到视图中
        [self.view addSubview:textLabel];
}



- (void)getOtherViewControllerMethod {


    if ([self.delegate respondsToSelector:@selector(didUpdateText:)]) {
                       [self.delegate didUpdateText:@"我是通过代理从别的视图里触发显示的"];
                   }
    
}


@end
相关推荐
提笔忘字的帝国2 小时前
【教程】macOS 如何完全卸载 Java 开发环境
java·开发语言·macos
北京自在科技3 小时前
苹果iOS 26.3实现跨安卓数据无缝迁移
android·ios·findmy
郑梓斌6 小时前
Luban 2 Flutter:一行代码在 Flutter 开发中实现图片压缩功能
flutter·ios
数据雕塑家8 小时前
【网络故障排查实战】多台机器互ping异常:MAC地址冲突引发的网络“薛定谔猫“现象
网络·macos
遥不可及zzz8 小时前
ios adjust Google 设备端转化衡量
ios
酒醉的胡铁12 小时前
uniapp解决video组件在ios上全屏页面旋转90度,组件旋转180度
ios·uni-app
TheNextByte113 小时前
将照片从Mac传输到Android 7 种可行方法
android·macos·gitee
张飞签名上架13 小时前
深度解析超级签:iOS 应用分发的便捷之选与风险权衡
ios·苹果签名·企业签名·苹果超级签名·tf签
提笔忘字的帝国13 小时前
【2026版】macOS 使用 Homebrew 快速安装 Java 21 教程
java·开发语言·macos