如何在ios中将标签文本传递给textview

时间:2014-10-20 07:26:01

标签: ios objective-c

我已经尝试过所有可以解决问题的方法,因为我是新手我没有得到明确的答案。 这是我的第一个View控制器

@implementation ViewController

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{

    if ([segue.identifier isEqualToString:@"textAdd"]) {

        TextAddViewController *tv=[[TextAddViewController alloc]init];
        if ([self.text isEqualToString:@" "]) {

            tv.usingText.text=@" ";
        }

        else{
        tv.usingText.text=self.text;

        }
    }

    }
-(IBAction)GetttingText:(UIStoryboardSegue*)segue
{

    TextAddViewController *getText=segue.sourceViewController;
    [self AddTextToCanvasWithGesture:getText.usingText];

}

-(void) LaunchText
{

[self performSegueWithIdentifier:@"textAdd" sender:self];

}

-(void)AddTextToCanvasWithGesture:(UITextView*)takenText
{

    CGRect rect = CGRectMake(35, 60,takenText.contentSize.width,takenText.contentSize.height);

    UIView *holderView = [[UIView alloc] initWithFrame:rect];

    rect.origin.x=0;
    rect.origin.y=0;
    UILabel *textLabel=[[UILabel alloc]initWithFrame:rect];


    [textLabel setText:takenText.text];
     self.text=takenText.text;

    [textLabel setTextColor:takenText.textColor];
    [textLabel setFont:[UIFont fontWithName:takenText.font.fontName size:takenText.font.pointSize]];
    [textLabel setNumberOfLines:0];
    [textLabel sizeToFit];
    [holderView setTag:1];
    [textLabel setTag:1+1];
    [holderView addSubview:textLabel];




    UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scale:)];

    [pinchRecognizer setDelegate:self];
    [holderView addGestureRecognizer:pinchRecognizer];
    pinchRecognizer = nil;

    UIRotationGestureRecognizer *rotationRecognizer = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotate:)];

    [rotationRecognizer setDelegate:self];
    [holderView addGestureRecognizer:rotationRecognizer];
    rotationRecognizer = nil;

    UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(move:)];

    [panRecognizer setMinimumNumberOfTouches:1];
    [panRecognizer setMaximumNumberOfTouches:1];

    [panRecognizer setDelegate:self];
    [holderView addGestureRecognizer:panRecognizer];
    panRecognizer = nil;

    UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)];

    [tapRecognizer setNumberOfTapsRequired:1];
    [tapRecognizer setDelegate:self];

    [holderView addGestureRecognizer:tapRecognizer];



    tapRecognizer = nil;

    UITapGestureRecognizer *doubleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(LaunchText)];

    [doubleTapRecognizer setNumberOfTapsRequired:2];
    [doubleTapRecognizer setDelegate:self];


    [holderView addGestureRecognizer:doubleTapRecognizer];
    holderView.userInteractionEnabled=YES;


    [tapRecognizer requireGestureRecognizerToFail:doubleTapRecognizer];
}

这是我的第二视图控制器

#import "TextAddViewController.h"
#import "ViewController.h"

@interface TextAddViewController ()
{

}

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


@end

@implementation TextAddViewController

-(void)viewDidLoad
{
    [super viewDidLoad];


    ViewController *vm=[[ViewController alloc]init ];
    // [self.noting setText:@"Hi"];
    [self.noting setText:vm.ShowText.text];
    [self.usingText setText:vm.text];

}

我的代码非常适合在Label上显示textview文本,但我想再次编辑标签文本,所以我必须在同一文本视图中显示标签文本。问题是它没有在textview中显示文本。每次textview都是空的。

1 个答案:

答案 0 :(得分:0)

你做错了几件事。主要的是您实例化TextAddViewController的新实例。如果您不熟悉面向对象编程,这可能有点难以理解(我建议following this link (youtube)并在继续使用xcode之前学习更多内容。)

您正确调用prepareForSegue方法,该方法将获取您创建的故事板segue,并将该seg中的所有数据标记到destinationViewController。您的问题是您实际上并未获取destinationViewController。相反,你正在创建一个TextAddViewController的新实例,它只会在内存中无所事事。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"textAdd"]) {

        TextAddViewController *tv=[[TextAddViewController alloc]init];
        if ([self.text isEqualToString:@" "]) {

            tv.usingText.text=@" ";
        }

        else{
            tv.usingText.text=self.text;

        }
    }
}

所以代替这个

 TextAddViewController *tv=[[TextAddViewController alloc]init];
        if ([self.text isEqualToString:@" "]) {

            tv.usingText.text=@" ";
        }

你应该这样做:

TextAddViewController *vc = [segue destinationViewController];
[vc setMyObjectHere:object];

在您的情况下,object将是您要设置的字符串。 这样,您就不需要GetttingText IBAction。

我希望这可以帮助你。如果您需要一些澄清,请随时询问。另一个建议是继续阅读Apple Documentation。它目前可能没有意义,但最终你将能够从文档中找到这样的东西