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
相关推荐
用户092 小时前
SwiftUI Charts 函数绘图完全指南
ios·swiftui·swift
YungFan2 小时前
iOS26适配指南之UIColor
ios·swift
权咚18 小时前
阿权的开发经验小集
git·ios·xcode
用户0918 小时前
TipKit与CloudKit同步完全指南
ios·swift
小溪彼岸20 小时前
macOS自带截图命令ScreenCapture
macos
法的空间1 天前
Flutter JsonToDart 支持 JsonSchema
android·flutter·ios
2501_915918411 天前
iOS 上架全流程指南 iOS 应用发布步骤、App Store 上架流程、uni-app 打包上传 ipa 与审核实战经验分享
android·ios·小程序·uni-app·cocoa·iphone·webview
TESmart碲视1 天前
Mac 真正多显示器支持:TESmart USB-C KVM(搭载 DisplayLink 技术)如何实现
macos·计算机外设·电脑
00后程序员张1 天前
iOS App 混淆与加固对比 源码混淆与ipa文件混淆的区别、iOS代码保护与应用安全场景最佳实践
android·安全·ios·小程序·uni-app·iphone·webview
Magnetic_h1 天前
【iOS】设计模式复习
笔记·学习·ios·设计模式·objective-c·cocoa