Ios 在Viewcontroller上进行一些计算,需要将结果显示给另一个Viewcontroller

Ios 在Viewcontroller上进行一些计算,需要将结果显示给另一个Viewcontroller,ios,uiviewcontroller,Ios,Uiviewcontroller,我有一个应用程序,在那里我进行了一些计算,需要将计算结果传输到ViewController3并在那里显示结果。现在我在有计算的同一个ViewController2中使用label。谢谢你的帮助 ViewController2.h #import <UIKit/UIKit.h> @interface ViewController2 : UIViewController<UITextFieldDelegate> @property (weak, nonatomic) IB

我有一个应用程序,在那里我进行了一些计算,需要将计算结果传输到ViewController3并在那里显示结果。现在我在有计算的同一个ViewController2中使用label。谢谢你的帮助

ViewController2.h

#import <UIKit/UIKit.h>

@interface ViewController2 : UIViewController<UITextFieldDelegate>

@property (weak, nonatomic) IBOutlet UILabel *gasPrice;

@property (weak, nonatomic) IBOutlet UILabel *gasCarMileage;

@property (weak, nonatomic) IBOutlet UITextField *perGalon;

@property (weak, nonatomic) IBOutlet UITextField *miles;

@property(nonatomic, copy, readonly) NSString *result;

- (IBAction)getIt:(id)sender;

@end
@protocol ViewController2Delegate;

@property (strong, nonatomic) id<ViewController2Delegate> delegate;


@protocol BexAPIClientDelegate <NSObject>
- (void)ViewController2:(ViewController2 *)vc didCalculateCost:(CGFloat)cost;
@end


Then at the end of the getIt() call the delegate 
[self.delegate viewController2:self didCalculateCost:gasCostPerMile];
ViewController3.h

#import <UIKit/UIKit.h>

@interface ViewController3 : UIViewController

@property(nonatomic, copy) NSString *result;

@end

在VC3中保留一个字符串。初始化VC3对象时,从VC2设置值。在viewDidLoad方法中更新VC3中的标签

您可以在视图控制器3中定义一个字符串属性,当您从视图控制器2推送视图控制器3时,将设置该属性

ViewController3接口声明

@interface ViewController2 ()

@property(nonatomic, copy) NSString *result;

@end
在ViewController 2中,您将在getIt方法的最后一步实现这一行

[self performSegueWithIdentifier:@"viewController3" sender: nil]
并实现另一个名为prepareforsgue的方法,如下所示

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"viewController3"]) {
        ViewController3 *viewController3 = [segue destinationViewController];
        viewController3.result = "YOUR CALCULATION RESULT HERE"
    }
}
请记住,您必须为视图控制器3设置标识符,转到情节提要并选择视图控制器3的视图,然后在identify inspector上,将情节提要ID指定为viewController3。

使用协议, 在ViewController2.h中

#import <UIKit/UIKit.h>

@interface ViewController2 : UIViewController<UITextFieldDelegate>

@property (weak, nonatomic) IBOutlet UILabel *gasPrice;

@property (weak, nonatomic) IBOutlet UILabel *gasCarMileage;

@property (weak, nonatomic) IBOutlet UITextField *perGalon;

@property (weak, nonatomic) IBOutlet UITextField *miles;

@property(nonatomic, copy, readonly) NSString *result;

- (IBAction)getIt:(id)sender;

@end
@protocol ViewController2Delegate;

@property (strong, nonatomic) id<ViewController2Delegate> delegate;


@protocol BexAPIClientDelegate <NSObject>
- (void)ViewController2:(ViewController2 *)vc didCalculateCost:(CGFloat)cost;
@end


Then at the end of the getIt() call the delegate 
[self.delegate viewController2:self didCalculateCost:gasCostPerMile];
加载ViewController3时,需要将其设置为ViewController2的代理。此外,您还需要设置ViewController3以符合协议


使用协议是值得的,因为它将使您的代码清晰且易于管理。

谢谢,我将尝试两种答案。非常感谢,我将尝试。遇到问题。第一在vC2.m文件中,当写入viewController3.result=self.result.text时;我收到一条消息:第二条消息是:从“NSStreeng*”分配给“UIlabel*”的指针类型不兼容。当我执行[self.navigationController-pushViewController:viewController3]时;获取消息:“UINavigationController”没有可见的@interface声明选择器“pushViewController”我不使用NavContriller。对于愚蠢的Q,我很抱歉,我完全是新手,我应该使用@propertynonatomic,复制NSString*result?您应该在ViewController头文件中声明该.h文件的属性。既然你们提到了,你们并没有使用NavController,你们是在使用故事板吗?是的,我正在使用故事板来创建界面。我使用按钮getIt进行计算,同时显示ViewController3。这是错误的方式吗?非常感谢,我现在只有一个问题是这里的Unusedvariable mileCost:“float mileCost=perGalon/miles;”在此处使用未声明的标识符mileCost:'viewController3.result=[[NSString alloc]initWithFormat:@您每行驶一英里将花费您$%f,mileCost];'