关于多个ViewController之间进行数据传递的方法

本文介绍了在iOS开发中,不同ViewController间进行数据传递的三种常见方法:利用AppDelegate对象、使用NSUserDefault以及通过定义委托实现父窗口获取子窗口数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


在开发iOS程序时,发现其基本操作中,在多个ViewController之间进行数据传递是一个非常常用的功能,因此特总结。方法方面,其实挺多的,真是各有个的好吧。只要能够实现功能,使用哪些,应该由用户之际决定。


1、通过application delegate对象处理。


ChartMAppDelegate * mydelegat =[[UIApplication sharedApplication] delegate];

mydelegat.serverIP = serIpaddr.text;


    需要注意的是在delegate当中,需要是定set和get方法,或者使用property或synthersize


2、使用NSUserDefault


NSString * string = [NSString stringWithString:@"nihao"];


NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];

[ud setObject:string forKey:@"mykey"];


读的时候参考如下代码:

NSString * value;

value = [ud objectForKey:@"mykey"];


3、使用在父窗口中获得子窗口设定的数据,这样可以采用定义委托的方式。第一窗口为父窗口,第二窗口为子窗口


 1.首先在父窗口中去定义个一委托UIViewPassValueDelegate用来传递值

 

@protocol UIViewPassValueDelegate

- (void)passValue:(NSString *)value;

@end
 

2.在父窗口的头文件里,声明delegate

#import <UIKit/UIKit.h>
#import 
"UIViewPassValueDelegate.h"
@interface DelegateSampleViewController : UIViewController 
<UIViewPassValueDelegate>
{
    UITextField 
*_value;
}
@property(nonatomic, retain) IBOutlet UITextField 
*value;

- (IBAction)buttonClick:(id)sender;

@end

 并在父窗口当中实现这个委托

- (void)passValue:(NSString *)value
{
  self.value.text 
= value;
    NSLog(
@"the get value is %@", value);
}

 

 button的Click方法,打开子窗口,并在子窗口中的delegate实现方法指向父窗口。

- (IBAction)buttonClick:(id)sender
{
    ValueInputView 
*valueView = [[ValueInputView alloc] initWithNibName:@"ValueInputView" bundle:[NSBundle mainBundle]];
    valueView.
delegate = self; // 把两个VC关联起来!
    [self setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
    [self presentModalViewController:valueView animated:YES];
}

 

 子窗口的实现

 .h 头文件

 

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

@interface ValueInputView : UIViewController {

    NSObject
<UIViewPassValueDelegate> * delegate;
    UITextField 
*_value;
}

@property(nonatomic, retain)IBOutlet UITextField 
*value;
@property(nonatomic, retain) NSObject
<UIViewPassValueDelegate> * delegate;

- (IBAction)buttonClick:(id)sender;

@end

 

 .m实现文件

 

#import "ValueInputView.h"


@implementation ValueInputView

@synthesize 
delegate;
@synthesize value 
= _value;
- (void)dealloc {
    [self.value release];
    [super dealloc];
}

- (IBAction)buttonClick:(id)sender
{
    [
delegate passValue:self.value.text]; // 具体的实现在第一个VC里。
    NSLog(
@"self.value.text is%@", self.value.text);
    [self dismissModalViewControllerAnimated:YES];    
   
}

- (void)viewDidUnload {
    [super viewDidUnload];
    
// Release any retained subviews of the main view.
    
// e.g. self.myOutlet = nil;
}



@end
 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值