在Objective-C中将值从一个ViewController传递到另一个ViewController

时间:2013-04-24 01:50:58

标签: ios objective-c uiviewcontroller

我正在尝试将NSStringmessage)从ViewController(发件人)传递给MyViewController(接收方)。

我在MyViewController中创建了一个名为ViewController的{​​{1}}实例,通过该实例我使用testViewContoller方法发送NSString

setTitle:

这是MyViewController *testViewController = [[MyViewController alloc] init]; [testViewController setTitle:message];

MyViewController.h

这是- (void)setTitle:(NSString*)title;

MyViewController.m

我不完全确定为什么这不起作用,但我认为它与调用- (void)setTitle:(NSString*)title { _testField.text = title; } 之前的viewDidLoad加载有关。

非常感谢您提供的任何帮助。

谢谢。

3 个答案:

答案 0 :(得分:0)

_testField在哪里创建?如果它在viewDidLoad中,那么当您调用nil时,它就是setTitle,这意味着它是一个无操作。将视图添加到窗口时会调用viewDidLoad,这意味着如果您只是在视图控制器上调用init viewDidLoad可能永远不会被调用。

我会在MyViewController上定义一个属性,这是所需的字段文本,然后_testField.text = title中有viewDidLoad

MyViewController *testViewController = [[MyViewController alloc] init];
testViewController.testFieldText = message;

- (void)viewDidLoad {
     [super viewDidLoad];

     // do something to initialize _testField here

     _testField.text = title;
}

另请注意,UIViewController已有一个名为title的属性,并且覆盖setTitle:可能会产生您不期望的副作用。

答案 1 :(得分:0)

这基本上与将内存分配给_testField的时间有关。 如果您使用_testField以编程方式创建viewDidLoad

MyViewController *testViewController = [[MyViewController alloc] init];
testViewController.testFieldText = message;

这两行无效,因为内存尚未分配给_testField so the text cannot come up.即使你在故事板上创建它并在方法中分配字符串

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

            SecondViewController *obj = segue.destinationViewController;
            [obj setTitle:@"New Title"];
    }

由于再次未分配内存,因此也无济于事。这个问题的简单解决方案是:

  1. 在设置MyViewController之前访问_testField的view属性,例如:

    MyViewController    *obj = [[MyViewController alloc] init];
    [self.navigationController pushViewController:obj animated:YES];
    [obj setTitle:@"New Title"];
    
  2. @property的{​​{1}}中设置字符串,并将字符串从属性重新分配给MyViewController

  3. 是的,_testFieldsetTitle的属性,如果你自定义它会混淆默认属性。安全玩......:)

答案 2 :(得分:-1)

在第一个ViewController中,您已使用以下

SecondViewcontroller *MyViewController = [[self storyboard] instantiateViewControllerWithIdentifier:@"SecondViewcontroller"];
MyViewController.Title = @"Welcome";
[self presentViewController:MyViewController animated:YES completion:Nil];

在secondViewcontroller中使用以下

要编辑的secondViewcontroller.h文件

@interface SecondViewcontroller : UIViewController
    @property (strong, nonatomic) NSString *Title;
@end

然后将Title值打印到secondviewcontroller