IOS界面传值-OC

news2025/1/16 12:31:27

1、页面跳转

由 ViewController 页面跳转至 NextViewController 页面

(1)ViewController

  • ViewController.h
#import <UIKit/UIKit.h>

@interface ViewController : UIViewController


@end

  • ViewController.m
#import "ViewController.h"
#import "NextViewController.h"

@interface ViewController ()



@property (nonatomic, strong) UILabel *label;
@property (nonatomic, strong) UIButton *button;



@end


@implementation ViewController


//懒加载 UILabel
-(UILabel *) label{
    if (_label == nil) {
        _label = [[UILabel alloc]initWithFrame:CGRectMake(100, 100, 200, 50)];
        _label.backgroundColor = [UIColor blackColor];
        _label.textColor = [UIColor whiteColor];
        _label.font = [UIFont systemFontOfSize:20];
    }
    return _label;
}



//懒加载 UIButton
-(UIButton *) button{
    if (_button == nil) {
        _button = [[UIButton alloc]initWithFrame:CGRectMake(100, 200, 200, 50)];
        _button.backgroundColor = [UIColor redColor];
        //setTitle:forState: 是 UIButton 的方法,允许你为按钮的不同状态设置不同的标题
        //为按钮在 普通状态 (UIControlStateNormal) 下设置标题为 "跳转至下个页面"
        [_button setTitle:@"跳转至下个页面" forState:UIControlStateNormal];
        //setTitleColor:forState: 是 UIButton 的方法,允许你为不同状态下的按钮标题设置不同的颜色
        //为按钮在 触摸抬起 (UIControlEventTouchUpInside) 事件时,设置标题颜色为白色 ([UIColor whiteColor])
        [_button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
        
        //点击事件
        //addTarget:action:forControlEvents:
        //target: 触发事件时的目标对象。通常是 self,即当前类的实例
        //action: 事件触发时调用的方法的 选择器,通过 @selector 来指定方法
        //forControlEvents: 指定触发事件的类型
        
        //UIControlEventTouchUpInside 按钮的 触摸抬起 事件
        [_button addTarget:self action:@selector(zlzButtonClick) forControlEvents:UIControlEventTouchUpInside];
        
        
    }
    return _button;
}


//按钮点击事件
-(void)zlzButtonClick{
    NextViewController *nextVC = [[NextViewController alloc]init];
    //NextViewController 需要全屏展示
    nextVC.modalPresentationStyle = UIModalPresentationFullScreen;
    
    
    //presentViewController:animated:completion:
    //viewControllerToPresent: 需要展示的视图控制器
    //animated: 是否使用动画过渡
    //completion: 动画完成后的回调,可以是 nil
    [self presentViewController:nextVC animated:YES completion:nil];
}




/**
 
 •    viewDidLoad:视图加载后,初始化视图。
 •    viewWillAppear::视图即将显示,准备更新 UI。
 •    viewDidAppear::视图已显示,启动交互或动画。
 •    viewWillDisappear::视图即将隐藏,保存数据。
 •    viewDidDisappear::视图已隐藏,释放资源或暂停任务。
 **/




//视图加载
- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor greenColor];
    NSLog(@"First viewDidLoad");
    //添加控件至根View
    [self.view addSubview:self.label];
    [self.view addSubview:self.button];
}




-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    NSLog(@"------First viewWillAppear");
}



- (void)viewWillLayoutSubviews{
    [super viewWillLayoutSubviews];
    NSLog(@"------First viewWillLayoutSubviews");
}

- (void)viewDidLayoutSubviews{
    [super viewDidLayoutSubviews];
    NSLog(@"------First viewDidLayoutSubviews");
}



- (void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    NSLog(@"------First viewDidAppear");
}

- (void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];
    NSLog(@"------First viewWillDisappear");
}

- (void)viewDidDisappear:(BOOL)animated{
    NSLog(@"------First viewDidDisappear");
}




@end



(2)NextViewController

  • NextViewController.h
#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface NextViewController : UIViewController


@end

NS_ASSUME_NONNULL_END
  • NextViewController.m

#import "NextViewController.h"

@interface NextViewController ()


@property (strong, nonatomic) UITextField *textFiled;
@property (strong, nonatomic) UIButton *button;


@end

@implementation NextViewController


-(UITextField *)textFiled{
    if (_textFiled == nil) {
        _textFiled = [[UITextField alloc]initWithFrame:CGRectMake(100, 300, 200, 50)];
        _textFiled.textColor = [UIColor blackColor];
        _textFiled.borderStyle = UITextBorderStyleLine;
    }
    
    return _textFiled;
}



-(UIButton *) button{
    if (_button == nil) {
        _button = [[UIButton alloc]initWithFrame:CGRectMake(100, 400, 200, 50)];
        _button.backgroundColor = [UIColor redColor];
        [_button setTitle:@"返回上一个页面" forState:UIControlStateNormal];
        [_button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
        
        //点击事件
        [_button addTarget:self action:@selector(zlzBackClick) forControlEvents:UIControlEventTouchUpInside];
    }
    
    return _button;
}




-(void)zlzBackClick{
    
    // dismissViewControllerAnimated:animated:completion:
    //用来 关闭当前视图控制器 的方法,通常用于关闭通过 presentViewController:animated:completion: 模态展示的视图控制器
    //completion:nil:表示关闭完成后执行的回调
    [self dismissViewControllerAnimated:YES completion:nil];
}





- (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@"------Second viewDidLoad");
    self.view.backgroundColor = [UIColor yellowColor];
    [self.view addSubview:self.textFiled];
    [self.view addSubview:self.button];
}


- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    NSLog(@"------Second viewWillAppear");
}



- (void)viewWillLayoutSubviews{
    [super viewWillLayoutSubviews];
    NSLog(@"------Second viewWillLayoutSubviews");
}

- (void)viewDidLayoutSubviews{
    [super viewDidLayoutSubviews];
    NSLog(@"------Second viewDidLayoutSubviews");
}




- (void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    NSLog(@"------Second viewDidAppear");
}

- (void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];
    NSLog(@"------Second viewWillDisappear");
}

- (void)viewDidDisappear:(BOOL)animated{
    NSLog(@"------Second viewDidDisappear");
}




@end

2、界面传值

2.1、属性传值

  • 在 NextViewController.h 添加属性 str
#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface NextViewController : UIViewController



//属性传值
@property (nonatomic, strong) NSString *str;



@end

NS_ASSUME_NONNULL_END

  • 在 ViewController.m 的跳转点击事件中 为NextViewController中的属性str 赋值
//按钮点击事件
-(void)zlzButtonClick{
    NextViewController *nextVC = [[NextViewController alloc]init];
    //NextViewController 需要全屏展示
    nextVC.modalPresentationStyle = UIModalPresentationFullScreen;
    
    
    //属性传值---传递
    nextVC.str = @"属性传值";
    

    //presentViewController:animated:completion:
    //viewControllerToPresent: 需要展示的视图控制器
    //animated: 是否使用动画过渡
    //completion: 动画完成后的回调,可以是 nil
    [self presentViewController:nextVC animated:YES completion:nil];
}

  • 在 NextViewController.m 中 textFiled 懒加载时赋值
-(UITextField *)textFiled{
    if (_textFiled == nil) {
        _textFiled = [[UITextField alloc]initWithFrame:CGRectMake(100, 300, 200, 50)];
        _textFiled.textColor = [UIColor blackColor];
        _textFiled.borderStyle = UITextBorderStyleLine;
        
        //属性传值---接收并显示
        _textFiled.text = self.str;
    }
    
    return _textFiled;
}

  • 效果

2.2、单例传值

(1)创建单例

  • DefaultInstance.h

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface DefaultInstance : NSObject


+(instancetype)getInstance;

@property (nonatomic, strong) NSString *instanceStr;

@end

NS_ASSUME_NONNULL_END

  • DefaultInstance.m

#import "DefaultInstance.h"

@implementation DefaultInstance


//类方法---创建单例对象
+(instancetype)getInstance{
    //首次创建会 将 sharedVC 赋值为 nil,然后创建一个对象
    //非首次都会直接返回上次的值
    static DefaultInstance *instance = nil;
    if (instance == nil) {
        instance = [[DefaultInstance alloc]init];
    }
    return instance;
}


@end

(2)正向传值

  • 在 ViewController.m 的跳转点击事件,为单例的属性值赋值
//按钮点击事件
-(void)zlzButtonClick{
    NextViewController *nextVC = [[NextViewController alloc]init];
    //NextViewController 需要全屏展示
    nextVC.modalPresentationStyle = UIModalPresentationFullScreen;
    
    
    //单例传值---正向传递
    [DefaultInstance getInstance].instanceStr = @"单例传值";
    
    
    //presentViewController:animated:completion:
    //viewControllerToPresent: 需要展示的视图控制器
    //animated: 是否使用动画过渡
    //completion: 动画完成后的回调,可以是 nil
    [self presentViewController:nextVC animated:YES completion:nil];
}

  • 在 NextViewController.m 的 textFiled懒加载时赋值
-(UITextField *)textFiled{
    if (_textFiled == nil) {
        _textFiled = [[UITextField alloc]initWithFrame:CGRectMake(100, 300, 200, 50)];
        _textFiled.textColor = [UIColor blackColor];
        _textFiled.borderStyle = UITextBorderStyleLine;

        //单例传值---接收并显示
        _textFiled.text = [DefaultInstance getInstance].instanceStr;
    }
    
    return _textFiled;
}

  • 效果

(3)反向传值

  • 在 NextViewController.m 的返回点击事件中,为单例中的属性赋值
-(void)zlzBackClick{
    
    
    //单例传值---反向传递
    NSLog(@"单例传值---反向传递: %@",self.textFiled.text);
    [DefaultInstance getInstance].instanceStr = self.textFiled.text;
    
    // dismissViewControllerAnimated:animated:completion:
    //用来 关闭当前视图控制器 的方法,通常用于关闭通过 presentViewController:animated:completion: 模态展示的视图控制器
    //completion:nil:表示关闭完成后执行的回调
    [self dismissViewControllerAnimated:YES completion:nil];
}

  • 在 ViewController.m 的 viewWillAppear() 方法中,获取单例属性值并展示
-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    NSLog(@"------First viewWillAppear");
    //单例传值---反向接收并展示
    NSLog(@"单例传值---反向接收并展示:%@", [DefaultInstance getInstance].instanceStr);
    self.label.text = [DefaultInstance getInstance].instanceStr;
}

  • 效果

2.3、NSUserDefaults传值

NSUserDefaults传值与单例传值类似,区别是单例传值是在内存中创建单例,而NSUserDefaults 则是在磁盘文件中的。

(1)正向传值

  • 在 ViewController.m 中的跳转点击事件中将值写入文件
//按钮点击事件
-(void)zlzButtonClick{
    NextViewController *nextVC = [[NextViewController alloc]init];
    //NextViewController 需要全屏展示
    nextVC.modalPresentationStyle = UIModalPresentationFullScreen;
    
    
    //NSUserDefaults-正向传值(存入磁盘文件)
    [[NSUserDefaults standardUserDefaults] setObject:@"NSUserDefaults传值" forKey:@"zlzKey"];
    //写入
    [[NSUserDefaults standardUserDefaults] synchronize];
    
    
    //presentViewController:animated:completion:
    //viewControllerToPresent: 需要展示的视图控制器
    //animated: 是否使用动画过渡
    //completion: 动画完成后的回调,可以是 nil
    [self presentViewController:nextVC animated:YES completion:nil];
}

  • 在 NextViewController.m 的 textFiled 懒加载时赋值
-(UITextField *)textFiled{
    if (_textFiled == nil) {
        _textFiled = [[UITextField alloc]initWithFrame:CGRectMake(100, 300, 200, 50)];
        _textFiled.textColor = [UIColor blackColor];
        _textFiled.borderStyle = UITextBorderStyleLine;
        

        //NSUserDefaults传值---接受并显示(从磁盘文件中读取)
        _textFiled.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"zlzKey"];
        
    }
    
    return _textFiled;
}

  • 效果

(2)反向传值

  • 在 NextViewController.m 中的返回点击事件中将值写入文件
-(void)zlzBackClick{
    
    //NSUserDefaults传值---反向传递
    NSLog(@"NSUserDefaults传值---反向传递:%@", self.textFiled.text);
    [[NSUserDefaults standardUserDefaults] setObject:self.textFiled.text forKey:@"zlzBackKey"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    
    
    // dismissViewControllerAnimated:animated:completion:
    //用来 关闭当前视图控制器 的方法,通常用于关闭通过 presentViewController:animated:completion: 模态展示的视图控制器
    //completion:nil:表示关闭完成后执行的回调
    [self dismissViewControllerAnimated:YES completion:nil];
}

  • 在 ViewController.m 中的 viewWillAppear() 方法中获取文件中的值
-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    NSLog(@"------First viewWillAppear");

    //NSUserDefaults传值---反向接收并展示
    NSLog(@"NSUserDefaults---反向接收并展示:%@", [[NSUserDefaults standardUserDefaults] objectForKey:@"zlzBackKey"]);
    self.label.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"zlzBackKey"];
}

  • 效果

2.4、代理传值

  • 代理传值主要应用于反向传值,即本示例中 NextViewController -> ViewController 传值
  • 委托方:NextViewController
  • 代理方:ViewController

(1)委托方 NextViewController 定义协议

  • 在 NextViewController.h 中创建协议

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN



//委托方定义协议
@protocol zlzPassValueDelegate <NSObject>

//协议定义一个方法
-(void)passValue:(NSString*)value;

@end



@interface NextViewController : UIViewController



//属性传值
@property (nonatomic, strong) NSString *str;



//定义一个持有协议的id指针
//weak是为了防止指针循环引用
@property (weak)id<zlzPassValueDelegate> zlzDelegate;



@end

NS_ASSUME_NONNULL_END

  • 在 NextViewController.m 中调用协议方法
-(void)zlzBackClick{
    
    //代理传值---反向传递
    [self.zlzDelegate passValue:self.textFiled.text];
    
    
    
    // dismissViewControllerAnimated:animated:completion:
    //用来 关闭当前视图控制器 的方法,通常用于关闭通过 presentViewController:animated:completion: 模态展示的视图控制器
    //completion:nil:表示关闭完成后执行的回调
    [self dismissViewControllerAnimated:YES completion:nil];
}

(2)代理方 ViewController 实现协议方法

  • 在 ViewController.m 中实现协议方法
#import "ViewController.h"
#import "NextViewController.h"

@interface ViewController ()<zlzPassValueDelegate>   //遵守协议


@property (nonatomic, strong) UILabel *label;
@property (nonatomic, strong) UIButton *button;



@end

@implementation ViewController


//...省略部分代码


//代理传值---实现协议方法
-(void)passValue:(NSString *)value{
    self.label.text = value;
}


@end

(3)绑定代理关系

  • 在 ViewController.m 的跳转点击事件中,设置 NextViewController 的代理是自己

//按钮点击事件
-(void)zlzButtonClick{
    NextViewController *nextVC = [[NextViewController alloc]init];
    //NextViewController 需要全屏展示
    nextVC.modalPresentationStyle = UIModalPresentationFullScreen;
    
    
    
    //代理传值---设置代理关系
    nextVC.zlzDelegate = self;
    
    
    //presentViewController:animated:completion:
    //viewControllerToPresent: 需要展示的视图控制器
    //animated: 是否使用动画过渡
    //completion: 动画完成后的回调,可以是 nil
    [self presentViewController:nextVC animated:YES completion:nil];
}

2.5、block传值

block传值与代理传值有点类似,也是主要应用于反向传值,但是使用起来比代理传值要简单。

  • 在 NextViewController.h 中定义 block
#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN


@interface NextViewController : UIViewController



//属性传值
@property (nonatomic, strong) NSString *str;


// 定义一个 block 进行页面反向传值
//copy属性是为了防止 block 循环引用
//block就是一个属性
//^就是block的标志
@property (copy) void (^zlzBlock)(NSString*);


@end

NS_ASSUME_NONNULL_END
  • 在 NextViewController.m 中的返回点击事件中调用 block 方法
-(void)zlzBackClick{
    
    //block传值---反向传递
    self.zlzBlock(self.textFiled.text);
    
    
    
    // dismissViewControllerAnimated:animated:completion:
    //用来 关闭当前视图控制器 的方法,通常用于关闭通过 presentViewController:animated:completion: 模态展示的视图控制器
    //completion:nil:表示关闭完成后执行的回调
    [self dismissViewControllerAnimated:YES completion:nil];
}

  • 在 ViewController.m 中的跳转点击事件中实现 属性 block
-(void)zlzButtonClick{
    NextViewController *nextVC = [[NextViewController alloc]init];
    //NextViewController 需要全屏展示
    nextVC.modalPresentationStyle = UIModalPresentationFullScreen;
        
    
    
    //block传值---实现block-接收来自页面2的值
    nextVC.zlzBlock = ^(NSString *value){
        self.label.text = value;
    };
    
    
    
    //presentViewController:animated:completion:
    //viewControllerToPresent: 需要展示的视图控制器
    //animated: 是否使用动画过渡
    //completion: 动画完成后的回调,可以是 nil
    [self presentViewController:nextVC animated:YES completion:nil];
}

2.6、通知传值

通知传值更灵活,主要用于跨页面跳转时。

类似于Android中的广播。

(1)接收方 ViewController

  • 在 ViewController.m 的跳转点击事件中,设置通知监听
-(void)zlzButtonClick{
    NextViewController *nextVC = [[NextViewController alloc]init];
    //NextViewController 需要全屏展示
    nextVC.modalPresentationStyle = UIModalPresentationFullScreen;
    

    
    //通知传值---添加监听,等待页面2的传值
    //addObserver:self 添加监听者为自己
    //通知的名称zlzNotify
    //object:nil 表示所有的发送者,只要是名为zlzNotify通知的都监听接收
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dealWithNotify:) name:@"zlzNotify" object:nil];
    
    
    
    
    
    //presentViewController:animated:completion:
    //viewControllerToPresent: 需要展示的视图控制器
    //animated: 是否使用动画过渡
    //completion: 动画完成后的回调,可以是 nil
    [self presentViewController:nextVC animated:YES completion:nil];
}



//接收到通知后的处理---参数1:通知
-(void)dealWithNotify:(NSNotification*)notification{
    self.label.text = notification.userInfo[@"zlzNotificationKey"];
}

(2)发送方 NextViewController

  • 在 NextViewController.m 的返回点击事件中发送通知
-(void)zlzBackClick{
    
   
    //通知传值---发送通知
    //object:nil表示群发
    [[NSNotificationCenter defaultCenter]postNotificationName:@"zlzNotify" object:nil userInfo:@{@"zlzNotificationKey":self.textFiled.text}];
    
    
    
    // dismissViewControllerAnimated:animated:completion:
    //用来 关闭当前视图控制器 的方法,通常用于关闭通过 presentViewController:animated:completion: 模态展示的视图控制器
    //completion:nil:表示关闭完成后执行的回调
    [self dismissViewControllerAnimated:YES completion:nil];
}

3、总结

属性传值简单的正向传值,不能跨页面传值
单例传值可以正向反向传值,可以跨页面,但是需要创建一个单例对象
NSUserDefaults传值类似单例传值,区别是单例传值是把值写入内存,而它是把值写入沙盒文件
代理传值主要用于反向传值,一对一,必须两个页面建立代理关系
block传值

主要用于反向传值,一对一

代理传值能做的它都能做,但他不能取代代理传值

通知传值可以跨页面传值,多对多

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2277533.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用 Python 自动化处理日常任务

&#x1f496; 欢迎来到我的博客&#xff01; 非常高兴能在这里与您相遇。在这里&#xff0c;您不仅能获得有趣的技术分享&#xff0c;还能感受到轻松愉快的氛围。无论您是编程新手&#xff0c;还是资深开发者&#xff0c;都能在这里找到属于您的知识宝藏&#xff0c;学习和成长…

Linux:地址空间(续)与进程控制

hello&#xff0c;各位小伙伴&#xff0c;本篇文章跟大家一起学习《Linux&#xff1a;地址空间与进程控制》&#xff0c;感谢大家对我上一篇的支持&#xff0c;如有什么问题&#xff0c;还请多多指教 &#xff01; 如果本篇文章对你有帮助&#xff0c;还请各位点点赞&#xff0…

链家房价数据爬虫和机器学习数据可视化预测

完整源码项目包获取→点击文章末尾名片&#xff01;

亿道三防丨三防笔记本是什么意思?和普通笔记本的优势在哪里?

三防笔记本是什么意思&#xff1f;和普通笔记本的优势在哪里&#xff1f; 在现代社会中&#xff0c;笔记本电脑已经成为人们工作和生活中不可或缺的一部分。然而&#xff0c;在一些特殊行业或环境中&#xff0c;普通笔记本电脑由于其脆弱性和对环境条件的敏感性&#xff0c;往…

通过proto文件构建 完整的 gRPC 服务端和客户端案例

基础教程-简单案例&#xff08;快入入门java-grpc框架&#xff09; 参考官方入门案例教程&#xff1a;里面我看proto编译&#xff0c;其实直接用maven就能直接将.proto文件编译成java代码。快速入门 | Java | gRPC 框架https://grpc.org.cn/docs/languages/java/quickstart/ …

UML系列之Rational Rose笔记九:组件图

一、新建组件图 二、组件图成品展示 三、工作台介绍 最主要的还是这个component组件&#xff1b; 然后还有这几个&#xff0c;正常是用不到的&#xff1b;基本的使用第四部分介绍一下&#xff1a; 四、基本使用示例 这些&#xff0c;主要是运用package还有package specifica…

K8S 节点选择器

今天我们来实验 pod 调度的 nodeName 与 nodeSelector。官网描述如下&#xff1a; 假设有如下三个节点的 K8S 集群&#xff1a; k8s31master 是控制节点 k8s31node1、k8s31node2 是工作节点 容器运行时是 containerd 一、镜像准备 1.1、镜像拉取 docker pull tomcat:8.5-jre8…

c++领域展开第十二幕——类和对象(STL简介——简单了解STL)超详细!!!!

文章目录 前言STL简介什么是STLSTL的版本STL的六大组件STL的重要性如何学习STL 总结 前言 上篇博客我们了解了初阶的模版函数&#xff0c;以及有关的一些使用方法。 今天我们来了解了解STL库的有关知识 跟我一起上车吧 STL简介 什么是STL STL&#xff1a;是C标准库的重要组成…

Onedrive精神分裂怎么办(有变更却不同步)

Onedrive有时候会分裂&#xff0c;你在本地删除文件&#xff0c;并没有同步到云端&#xff0c;但是本地却显示同步成功。 比如删掉了一个目录&#xff0c;在本地看已经删掉&#xff0c;onedrive显示已同步&#xff0c;但是别的电脑并不会同步到这个删除操作&#xff0c;在网页版…

科研绘图系列:R语言绘制微生物物种系统发育树(phylogenetic tree)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍构成要素有根树与无根树构建方法应用领域说明的问题教程加载R包数据下载导入数据数据预处理系统发育树可视化准备画图数据1. 构建基础系统发育树 `p1`2. 添加条形图 `p2`3. 添加热图…

1️⃣Java中的集合体系学习汇总(List/Map/Set 详解)

目录 01. Java中的集合体系 02. 单列集合体系​ 1. Collection系列集合的遍历方式 &#xff08;1&#xff09;迭代器遍历&#xff08;2&#xff09;增强for遍历​编辑&#xff08;3&#xff09;Lambda表达式遍历 03.List集合详解 04.Set集合详解 05.总结 Collection系列…

微信小程序:跨页面数据修改全攻略

一、引言 在微信小程序开发中&#xff0c;常常会遇到需要在不同页面之间修改数据的情况。比如在商品详情页添加商品到购物车后&#xff0c;购物车页面需要实时更新商品数量和总价&#xff1b;在用户设置页面修改了个人信息&#xff0c;首页的用户信息展示区域也需要同步更新。…

寒假第一次牛客周赛 Round 76回顾

AC数&#xff1a;2&#xff08;A、C&#xff09; B 思路&#xff1a; 等价于求&#xff1a; 数量最多的字符 #include<stdio.h> int main() {int n,num;int a[26]{0};//用于存储字母 a 到 z 的出现次数。scanf("%d",&n);char s[n];scanf("%s",s)…

【 PID 算法 】PID 算法基础

一、简介 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&#xff09;、Differential&#xff08;微分&#xff09;的缩写。也就是说&#xff0c;PID算法是结合这三种环节在一起的。粘一下百度百科中的东西吧。 顾名思义&#xff0c;…

Ubuntu打开文件夹不显示文件

1.情况介绍 使用ubuntu打开文件夹不显示文件夹里面的内容&#xff0c;而是直接打开了资源查看器。 2.解决办法 命令行安装nautilus sudo apt-get install nautilus

java.text.SimpleDateFormat (日期)

前言&#xff1a; 小编最近让流感折磨的快嘎啦&#xff0c; 呜呜呜&#xff0c;拖更了俩天&#xff0c; 从明天开始我们继续日更&#xff01;&#xff01;&#xff01;&#xff01; 我们一直都是以这样的形式&#xff0c;让新手小白轻松理解复杂晦涩的概念&#xff0c; 把Ja…

游戏市场成果及趋势

2024 年的游戏行业发展情况如何&#xff1f;这是一个既关系到开发商&#xff0c;又关系到玩家的问题&#xff0c;而市场分析师可以为我们揭晓答案。下面&#xff0c;就让我们来看看分析师给出的结论以及他们对未来趋势的预测。 玩家 自 2021 年起&#xff0c;全球平均游戏时间…

Java版-oracle数据库连接测试工具-Maven配置JDBC

一、目标: 1)数据迁移方案,原RAC,新RAC 2)关闭原RAC环境,修改新RAC环境的IP=原RAC环境的IP,优点:所有的应用端不用修改数据库连接字符串。 3)测试工具目标: 3.1 Java程序,运行后cmd窗口, 3.2 链接原RAC数据库IP,每2秒查询并显示数据; 3.3 关闭/断掉原RAC服务器,…

微信小程序实现个人中心页面

文章目录 1. 官方文档教程2. 编写静态页面3. 关于作者其它项目视频教程介绍 1. 官方文档教程 https://developers.weixin.qq.com/miniprogram/dev/framework/ 2. 编写静态页面 mine.wxml布局文件 <!--index.wxml--> <navigation-bar title"个人中心" ba…

数据结构-ArrayLIst-一起探索顺序表的底层实现

各位看官早安午安晚安呀 如果您觉得这篇文章对您有帮助的话 欢迎您一键三连&#xff0c;小编尽全力做到更好 欢迎您分享给更多人哦 大家好&#xff0c;我们今天来学习java数据结构的第一章ArrayList&#xff08;顺序表&#xff09; 1.ArrayList的概念 那小伙伴就要问了线性表到…