Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用按钮操作将数据从一个视图控制器传递到另一个视图控制器的方法有哪些?_Ios_Objective C - Fatal编程技术网

Ios 使用按钮操作将数据从一个视图控制器传递到另一个视图控制器的方法有哪些?

Ios 使用按钮操作将数据从一个视图控制器传递到另一个视图控制器的方法有哪些?,ios,objective-c,Ios,Objective C,我只是一个iOS开发的初学者,从过去的2天起就一直被这个问题困扰着。我想做的是,我有两个视图控制器,第一个视图控制器由两个按钮组成,我想在下一个视图控制器中,在相应的按钮操作上加载特定类型的数据 我所做的如下: 我使用id为“showDetailSegue”的segue连接了两个ViewController, 1.视图控制器 2.二次VC 我想在点击ViewController上的按钮时更新SecondVC上的标签 //ViewController.h #import <UIKit

我只是一个iOS开发的初学者,从过去的2天起就一直被这个问题困扰着。我想做的是,我有两个视图控制器,第一个视图控制器由两个按钮组成,我想在下一个视图控制器中,在相应的按钮操作上加载特定类型的数据

我所做的如下: 我使用id为“showDetailSegue”的segue连接了两个ViewController, 1.视图控制器 2.二次VC 我想在点击ViewController上的按钮时更新SecondVC上的标签

//ViewController.h    
#import <UIKit/UIKit.h>  
#import "SecondVC.h"  
@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UITextField *textField;  
@end  


//ViewController.m
#import "ViewController.h"
#import "SecondVC.h"
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
 [super viewDidLoad];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
NSString *str = @"my string data..";
 -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if([segue.identifier isEqualToString:@"showDetailSegue"]){
    SecondVC *controller = segue.destinationViewController;
    controller.getString = str;
    controller.testLabel.text = str;
}
}
@end

//SecondVC.h
#import <UIKit/UIKit.h>
@interface SecondVC : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *testLabel;
@property (nonatomic, strong) NSString *getString;
@end

//SecondVC.m
//ViewController.h
#进口
#导入“SecondVC.h”
@界面ViewController:UIViewController
@属性(弱,非原子)IBUITEXTFIELD*textField;
@结束
//ViewController.m
#导入“ViewController.h”
#导入“SecondVC.h”
@界面视图控制器()
@结束
@实现视图控制器
-(无效)viewDidLoad{
[超级视图下载];
}
-(无效)未收到记忆警告{
[超级记忆警告];
}
NSString*str=@“我的字符串数据..”;
-(void)prepareForSegue:(UIStoryboardSegue*)segue发送方:(id)发送方{
if([segue.identifier isEqualToString:@“showDetailSegue”]){
SecondVC*控制器=segue.destinationViewController;
controller.getString=str;
controller.testLabel.text=str;
}
}
@结束
//第二个VC.h
#进口
@第二界面VC:UIViewController
@属性(弱、非原子)IBUILabel*testLabel;
@属性(非原子,强)NSString*getString;
@结束
//第二个VC.m
请给我一个简单明了的解释


提前谢谢

有许多方法可以将数据传递到所需的
ViewController

1。使用segue

假设您必须将字符串传递给另一个VC

#import "ViewController.h"
#import "SecondVC.h"

@interface ViewController ()
// all instance global variable should be declare here 
NSString str;
@end

@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    str = @"my string data..";
}

// segue delegate method 
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"segueIdentifireName"]) {

        SecondVC *destViewController = segue.destinationViewController;
        destViewController.getString = str;
    }
}
@end
现在必须在destinationVc
.h
文件中创建
NSString
对象,如下所示

@interface SecondVC : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *testLabel;
@property (nonatomic, strong) NSString *getString;
@end
.m
文件内获取字符串数据,如:

@interface ViewController ()

@end

@implementation SecondVC

- (void)viewDidLoad {
    [super viewDidLoad];
    self.testLabel.text = getString;   // we passed `str` data inside `getString` object so it can be refelect here using `getString` variable.
    NSLog(@"string data %@", getString);
}
NSLog(@"string data %@", getString);
2。使用情节提要id:

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
YourViewControllerClassName *vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"viewContIdentifire"];
vc.getString = str;
[self.navigationController pushViewController:vc animated:YES];
.h
文件中:

@property (nonatomic, strong) NSString *getString;
.m
文件内获取字符串数据,如:

@interface ViewController ()

@end

@implementation SecondVC

- (void)viewDidLoad {
    [super viewDidLoad];
    self.testLabel.text = getString;   // we passed `str` data inside `getString` object so it can be refelect here using `getString` variable.
    NSLog(@"string data %@", getString);
}
NSLog(@"string data %@", getString);
在Swift3中

let controller = UIStoryboard().getControllerInstance(storyBoardName: "MainStoryboard", identifire: "viewContIdentifire")
controller.getString = str;
self.navigationController?.pushViewController(controller, animated: true)
要恢复数据,请执行以下操作:

创建需要将数据发送回的协议

// dec var on top
var delegate: YourDelegate!

protocol YourDelegate {
    func delegateFunction(value: String)
}
点击操作时调用委托函数:

delegate.delegateFunction(value: "My sample string")
接收控制器

  • 导航时确认委托为self
  • 在上面实现YourDelegate

    func delegateFunction(值:字符串){ 打印(“获取:”,值) }

3。使用
NSUserDefaluts
()


4。使用本地数据库。

为什么需要2天的时间,有很多解决方案,你只需要用谷歌搜索一下就可以了,我很抱歉,但是我;我只是一个iOS开发者的初学者。请仔细阅读我的代码并提出必要的修改建议。非常感谢您的时间和努力,但我仍然不清楚。对不起,我只是iOS副总裁的初学者。请仔细阅读我的代码并提出必要的更改建议我还想将数据从一个VC传递到另一个VC,最初从本地数据库获取。请提供一些有用的链接。@ShrikantPanchal检查更新的ans,现在您需要成功地将segue连接到
SegueIdentificationRename
标识符或相应的标识符。@ShrikantPanchal这是一个示例,告诉您如何将数据传递给另一个vc,您只需要插入并获取数据,然后像上面那样传递,这里有一些学习db的链接,非常感谢。。!!