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