-1

我正在尝试将使用 ViewController 类中的文本字段收集的用户输入传递给 UIView 类,以便使用 drawRect 方法绘制用户输入的点。我已经尝试创建一个方法,将输入从 textField 传递到一个名为 的方法findXValue,但我不确定如何在ViewController和之间共享该数据graphView。也许涵盖这两个类的接口可以工作,但是由于我没有使用 Xcode 的经验,所以我不知道如何做到这一点。这是我的代码:

UIView 界面:

#import <UIKit/UIKit.h>

@interface graphView : UIView

@end

图视图实现:

#import "graphView.h"

@implementation graphView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

- (void)drawRect:(CGRect)rect
{
    CGContextRef c = UIGraphicsGetCurrentContext();

    CGFloat red[4] = {1.0f, 0.0f, 0.0f, 1.0f};
    CGContextSetStrokeColor(c, red);
    CGContextBeginPath(c);
    CGContextMoveToPoint(c, 30,30);
    CGContextAddLineToPoint(c, 30.0f, 260.0f);
    CGContextStrokePath(c);

    CGContextRef d = UIGraphicsGetCurrentContext();

    CGContextSetStrokeColor(d, red);
    CGContextBeginPath(d);
    CGContextMoveToPoint(d, 30,260);
    CGContextAddLineToPoint(d, 400.0f, 260.0f);
    CGContextStrokePath(d);
}

@end

视图控制器接口:

#import <UIKit/UIKit.h>
@interface ViewController : UIViewController <UITextFieldDelegate>
@property (strong, nonatomic) IBOutlet UITextField *xTextField;

- (NSString *)findXValue:(NSString*)xValue;

@end

NSString *xValue;

视图控制器实现:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

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

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    NSLog(@"%@",self.xTextField.text);

    xValue = self.xTextField.text;
    [self findXValue:xValue];

    [self.xTextField resignFirstResponder];
    return YES; 
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (NSString *)findXValue:(NSString*)xValue{
    NSLog(@"%@",xValue);
    return xValue;
}


@end

谢谢。

ASA 回答后修改:起初似乎可以编译,但在运行时中断。这是代码:

视图控制器.h:

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

@interface ViewController : UIViewController <UITextFieldDelegate>
@property (strong, nonatomic) IBOutlet UITextField *xTextField;
- (NSString *)findXValue:(NSString*)xValue;

@property (nonatomic, strong) graphView* graphView1; 

@end

NSString *xValue;
NSString *finalXValue;

视图控制器.m:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

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

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    NSLog(@"%@",self.xTextField.text);

    xValue = self.xTextField.text;
    [self findXValue:xValue];

    [self.xTextField resignFirstResponder];
    return YES; 
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (NSString *)findXValue:(NSString*)xValue{
    NSLog(@"%@",xValue);
    self.graphView1 = [[graphView alloc] init];
    self.graphView1.xNum = xValue;
    NSLog(@"%@",self.graphView1.xNum);
    [self.graphView1 findX:xValue];
    /*
    graphView *graphViewPlz = [[graphView alloc] init];
    graphView.xNum.viewDidLoad;
    [self.navigationController pushViewController:graphViewPlz animated:YES];
     */
    finalXValue = xValue;
    return xValue;
}


@end

图视图.h:

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

@interface graphView : UIView
@property(nonatomic) BOOL *isSomethingEnabled;
@property(nonatomic, strong) NSString *xNum;
@property (nonatomic, strong) UIViewController* viewController;
- (void) findX:(NSString*)xValue;
@end

NSString *xValue;

图视图.m:

#import "graphView.h"

@implementation graphView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

- (void)drawRect:(CGRect)rect
{
    NSLog(@"%@",self.xNum);
    CGContextRef c = UIGraphicsGetCurrentContext();

    CGFloat red[4] = {1.0f, 0.0f, 0.0f, 1.0f};
    CGContextSetStrokeColor(c, red);
    CGContextBeginPath(c);
    CGContextMoveToPoint(c, 30,30);
    CGContextAddLineToPoint(c, 30.0f, 260.0f);
    CGContextStrokePath(c);

    CGContextRef d = UIGraphicsGetCurrentContext();

    CGContextSetStrokeColor(d, red);
    CGContextBeginPath(d);
    CGContextMoveToPoint(d, 30,260);
    CGContextAddLineToPoint(d, 400.0f, 260.0f);
    CGContextStrokePath(d);
}

- (void) findX:(NSString*)xValue{
    NSLog(@"%@",xValue);
}

@end

谢谢!

4

1 回答 1

0

我会创建一个单独的类 GraphView.h (你做了),并在 viewcontroller.h 文件中将它作为 viewcontroller 的一个属性放这个

@property (nonatomic, strong) GraphView* graphView;

记得把这个放在最上面

#import "GraphView.h"

从那里你可以有graphView的属性。您可以在需要时分配图形视图

self.graphView = [[GraphView alloc] init];

然后调用该对象的方法。如果您不知道何时执行此操作,只需将其与

- (void)viewDidLoad {}

方法。现在,当您想要传递数据时,您可以调用类似的方法

[self.graphView configureWithXPoints:xpoints];

或设置属性

self.graphView.data = newData;

这将是在视图和视图控制器之间传递信息的要点。请记住,drawRect在绘制之前不会调用该方法,因此当您希望它在屏幕上更新时,您必须手动调用该方法或将该视图重新添加到 viewController。

于 2013-09-27T18:31:48.523 回答