在iOS中的ViewController之间传递数据

追逐白兔

我正在尝试在UIViewControllers,iOS新手之间传递一个整数值并遇到问题。

UIViewController设置值的位置,没有问题。但是在设置NSLog了值之后,第二个值显示为null UIViewController

我的应用将使用水平滑块确定UIImage animationDuration不同之间的时间长度UIViewController

此方法从水平滑块正确接收值。我初始化“其他”的一个实例UIViewControllerimageview.somedata属于其他视图控制器。我知道由于NSLogs以下原因,该值已正确传递

- (IBAction) changeButtonPressed:(id)sender {
imageView = [[GTImageView alloc] initWithNibName:@"GTImageView" bundle:nil];
NSLog(@"text value = %@", myTextField);
NSString *textValue = [myTextField text];
int value = [textValue floatValue];
if (value < 0) value = 0;
if (value > 100) value = 100;
mySlider.value = value;
sliderValue = &value;
NSLog(@"sliderValue = %d", *(sliderValue));
myTextField.text = [NSString stringWithFormat:@"%.1d", value];
if ([myTextField canResignFirstResponder]) [myTextField resignFirstResponder];
imageView.someData = *(sliderValue);
NSLog(@"imageView.someData = %d", imageView.someData);
}

这是该实现文件的顶部

    #import "GTSettingsVC.h"
    #import "GTImageView.h"
    #import "GTImageView.m"
    @interface GTSettingsVC ()
    @end

    @implementation GTSettingsVC
    @synthesize mySlider, myTextField;
    @synthesize sliderValue;

该头文件

    #import "GTImageView.h"
    @interface GTSettingsVC : UIViewController
    {
    IBOutlet UISlider *mySlider;
    IBOutlet UITextField *myTextField;
    GTImageView *imageView;
    int *sliderValue;
    }

    @property (nonatomic) int *sliderValue;

我正在尝试将数据发送到的视图控制器的头文件

    #import <UIKit/UIKit.h>

    @interface GTImageView : UIViewController
    {
    UIScrollView* scrollView;
     UIPageControl* pageControl;
     int *someData;
     }
     @property (nonatomic) int *someData;

我希望变量some​​Data具有在第一个控制器中赋予它的值的实现文件。NSLog在此实现中返回null。

    - (void)viewDidLoad
    {
     [super viewDidLoad];
     // Do any additional setup after loading the view from its nib.



      UIImageView *animatedImageView = 
     [[UIImageView alloc] i nitWithFrame:CGRectMake(0,      55, 400, 550)];
      [self.view addSubview:animatedImageView];

       animatedImageView.animationImages = [NSArray arrayWithObjects:
                                     [UIImage imageNamed:@"IMG_0052.JPG"],
                                     [UIImage imageNamed:@"IMG_0054.JPG"],
                                     [UIImage imageNamed:@"IMG_0081.JPG"],
                                     nil];
      NSLog(@"some data = %@", someData);
   //   NSLog is returning null
      int x = someData;
      animatedImageView.animationDuration = 
      x * [animatedImageView.animationImages count];
      [animatedImageView startAnimating];
      [self.view addSubview: animatedImageView];

      }
瑞奇

我相信您尚未掌握View Controller生命周期以及Model View Controller(MVC)的概念/思想

GTImageView您定义和启动changeButtonPressed你的第一个视图控制器(GTSettingsVC)是为本地对象/实例GTSettingsVC如果您的视图控制器从GTSettingsVC过渡GTImageView,那么数据将不会传递到那里。

既然您正在使用UINavigationController,我相信您已经拥有了Segue传递数据的最简单方法UINavigationController是使用prepareForSegue在过渡到第二视图控制器之前,您必须准备要传递给第二视图控制器的数据。

您还会在GTImageView中犯一些错误someData不是对象,它不应该带有*并且也请尽量不要使用variable,而应仅使用属性它应该是:-

 @property (nonatomic) int someData;

GTSettingsVC.M中,添加以下功能:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
  GTImageView * viewController = segue.destinationViewController;
  viewController.someData = 99;
}

GTImageView.H中

@interface GTImageView : UIViewController
{
    UIScrollView* scrollView;
    UIPageControl* pageControl;
}
@property (nonatomic) int someData;
@end

GTImageView.M中的viewDidLoad

- (void)viewDidLoad
{
  [super viewDidLoad];
  UIImageView *animatedImageView =
  [[UIImageView alloc] initWithFrame:CGRectMake(0,55, 400, 550)];
  [self.view addSubview:animatedImageView];

  animatedImageView.animationImages = [NSArray arrayWithObjects:
                                     [UIImage imageNamed:@"IMG_0052.JPG"],
                                     [UIImage imageNamed:@"IMG_0054.JPG"],
                                     [UIImage imageNamed:@"IMG_0081.JPG"],
                                     nil];
  NSLog(@"some data = %d", self.someData);
  int x = self.someData;
  animatedImageView.animationDuration =
  x * [animatedImageView.animationImages count];
  [animatedImageView startAnimating];
  [self.view addSubview: animatedImageView];
}

我向Github添加了一个示例项目供您参考:-https: //github.com/voyage11/PassingDataTest

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

iOS:在viewController(在NavigationController中嵌入的目标)之间传递数据

iOS 7-在ViewController之间传递数据(图像)

在swift4中的ViewController之间传递数据

ios将数据从TabbarController传递到Storyboard中的ViewController

在ViewController和ContainerViewController之间传递数据

在两个ViewController之间传递数据

在ViewController之间传递数据时出错

在2个ViewController之间传递数据

如何将数据从 ViewController 传递到标签栏 iOS 中的 ViewController?

在Swift中的ViewController之间传递数组/对象

在Swift中的一个ViewController中的视图之间传递数据

在同一个ViewController中的两个容器之间传递数据

在两个视图之间传递数据(在同一个 ViewController 中)

ViewController iOS中传递图像的质量下降

在ViewController之间传递NSManagedObject

通过Collection View单元在ViewController之间传递数据

在两个ViewController之间传递数据(委托)-Swift

在tabController下的viewController之间以快速,事件顺序传递数据

在对象类和 ViewController (Swift) 之间传递数据

在类/异步请求/ iOS之间传递数据

在 IOS 上的页面之间传递数据

更新@EnvironmentObject变量以将数据传递到SwiftUI中的PageViewController会导致丢失ViewController之间的滑动

在ViewController之间传递Realm对象

有没有办法在iOS Xamarin中的视图之间传递数据

在Swift中的TableView之间传递数据

在Django中的不同视图之间传递数据

在Flutter中在屏幕之间传递数据

在 Django 中的视图之间传递数据

在Angular中的同级组件之间传递数据