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
相关推荐
counterxing12 小时前
最近发现一个 Mac 工具,有点像把 Raycast、语音输入法、截图和录屏塞到了一起
macos·ai编程·claude
songgeb2 天前
启发式 UI 自动化:从线性剧本到每步读屏决策
ios·测试
壹方秘境5 天前
我用Go语言开发了一个跨平台的HTTPS抓包和调试工具
前端·后端·ios
元Y亨H8 天前
MacBook Air 开发神器:IDEA 与 PyCharm 极简安装及环境配置
macos
yuanyxh9 天前
macOS 应用 - 纯对话生成
前端·macos·ai编程
AI创界者10 天前
PilotTTS 一键整合包(Win/Mac):8G 显存畅跑,实测解锁情绪与副语言的精准控制
人工智能·macos·aigc·音视频
AirDroid_cn11 天前
系统终端与iTerm2字体看起来不一样?macOS Sequoia统一渲染指南
macos
初级代码游戏11 天前
easy Photo Clean公测版:快速清理iPhone照片 邀请公测
ios·iphone
库奇噜啦呼11 天前
【iOS】RunLoop学习
学习·ios
黑科技iOS上架11 天前
iOS应用周末提交什么情况算卡审
经验分享·ios