ios - 通缉解释 : Concept of passing data between UIViewController and UIView

标签 ios objective-c uiview uiviewcontroller

<分区>

我浏览了很多“在 View Controller 之间传递数据”的问题。但我似乎无法理解传递数据的概念。

为什么将用户或系统生成的值从一个 View 获取到另一个 View 如此麻烦? 我是 Objective-C 的新手,但我之前做过一些编程,所以我对所有术语都不陌生。

我已经阅读了有关委托(delegate)、协议(protocol)、单例和 segue 的内容。我曾尝试使用示例文件进行试验,但无法根据我的需要回收代码,我也不了解传递数据所需的过程。

我想学习的是如何将所有生成的数据从 1 个 UIViewController 传递到多个 UIView。我生成的所有值都需要能够即时更新并且无需 View 切换即可访问,也不需要按下按钮来更新/传递数据槽。

谁能一劳永逸地解释一下如何在不同的头文件和 UIView 之间传递数据。这让我抓狂,我只希望数据在我需要的时候随时随地都可以访问。

这就是我想要创造的, 我有三个 slider ,每个 slider 代表一个轴。

用户可以根据他们与 slider 一起使用的值创建两个关键帧。

这些值被保存(在 UIViewControler.m 中)并在屏幕上创建一个视觉关键帧 (UIImage)。 关键帧 1 和关键帧 2,这些关键帧将用作 UIBezierCurve 的 CGPoint。

也就是说,我将一个 UIView 拖到我的 UIViewController 中,并将 UIView 链接到我的“BezierGraphView.h”。

现在我需要将这些关键帧点传递给 BezierGraphView。我该怎么做?

最佳答案

编辑澄清: 这就是您可以将数据从您的控件( slider )发送到其他 .h 的方式,如您所说,UIView。当在多个 UIViewController 之间发送数据时,您可以通过 segues 和委托(delegate)方法进行。 BezierGraphView 是一个 View ,而不是一个 ViewController。正如有人在评论中建议的那样,我会对 MVC(模型- View - Controller )范例做一些研究。

您似乎只有一个带有四个 subview 的 UIViewController。三个 UISlider 和一个具有一些自定义 drawRect 代码的 BezierGraphView。如果您想在 BezierGraphView 更改时将 slider 值发送到它,请执行以下操作:

首先,确保您的 BezierGraphView 和 UIViewController 中的 slider 有一个导出。

其次,为 slider 的 Value Changed 控件创建一个 Action ,并将所有三个都连接到它。

// MyUIViewController.h

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

@interface MyUIViewController : UIViewController

@property (nonatomic, strong) IBOutlet BezierGraphView *graphView;
@property (strong) IBOutlet UISlider *xSlider;
@property (strong) IBOutlet UISlider *ySlider;
@property (strong) IBOutlet UISlider *zSlider;

-(IBAction)sliderValueDidChange;

@end

然后将您的 BezierGraphView 的 drawRect 代码移动到一个函数中:

//BezierGraphView.h

#import <UIKit/UIKit.h>

@interface BezierGraphView : UIView

-(void)valuesDidChangeWithX:(CGFloat)xValue Y:(CGFloat)yValue Z:(CGFloat)zValue;

@end


//BezierGraphView.m
#import "BezierGraphView.h"

@implementation BezierGraphView


-(void)valuesDidChangeWithX:(CGFloat)xValue Y:(CGFloat)yValue Z:(CGFloat)zValue{
    //drawRect code goes here
}


@end

然后每当 slider 的值发生变化时,它会在 sliderValueDidChange 中通知 UIViewController,您可以告诉 BezierGraphView 使用 valuesDidChangeWithX: Y: Z: 方法进行更新:

//MyUIViewController.m

@implementation MyUIViewController

//Other UIViewController stuff, like viewDidLoad

-(IBAction)sliderValueDidChange{

    [self.graphView valuesDidChangeWithX:self.xSlider.value 
                                       Y:self.ySlider.value
                                       Z:self.zSlider.value]
}

@end

关于ios - 通缉解释 : Concept of passing data between UIViewController and UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21652019/

相关文章:

ios - 如何为我的自定义 Open Graph 故事选择要发布的灵活句子结构?

ios - 是否可以使导航栏中的大标题可点击(iOS)

ios - Swift - 将函数分配给工具栏按钮项

ios - UINavigationController pushViewController 不起作用

iphone - 动画移动和旋转 UIView 不太有效

ios - AdBannerView 和弹出窗口 : just hide?

objective-c - 在 Objective-C 中覆盖类别定义的方法是否安全?

iphone - 保存用户默认值时出现随机 BAD ACCESS

iphone - 保存 View 问题中的两个 PickerViews?

ios - 水平均匀分布三个按钮ios