【问题标题】:Passing string between UIViewControllers.在 UIViewControllers 之间传递字符串。
【发布时间】:2014-04-02 15:47:21
【问题描述】:

在 ViewContrller1.h 中:

@property (retain,nonatomic) NSString *myString;

在 ViewController2.m 中,我想从文本框中读取一个值并将其分配给 viewContrller1.theString 并转到 ViewContrller1

我使用了这种方法,但我在 ViewContrller1 中得到了我的字符串的空值:

- (IBAction)buttonPressed:(id)sender {

    ViewContrller1 *go=[self.storyboard instantiateViewControllerWithIdentifier:@"ViewContrller1"];
    go.myString=self.myTextFeild.text;
    [self.navigationController pushViewController:go animated:YES];

}

想知道它是如何工作的?

【问题讨论】:

  • 您的代码似乎正确。我看到的可能问题是 self.myTextFeild.text。也许该文本字段的 IBOutlet 设置不正确
  • 在方法的第二行设置断点,检查myTextField和myTextField.text的值。你看到了什么?
  • @duricanRadu 它在 viewcontrller1.h 中设置为 (retain,nonatomic) 它应该是强的吗?谢谢
  • @RobP 怎么样,谢谢
  • 我说的是 self.myTextFeild 而不是 go.myString。确保您的 xib/storyboard 的出口连接到 myTextField

标签: ios iphone objective-c uiviewcontroller storyboard


【解决方案1】:

尝试在新的视图控制器中简单地导入 viewcontrller1.h。

#import "viewcontrller1.h"

Marcal 的回答也应该有效。

【讨论】:

    【解决方案2】:

    要在 2 个视图之间传递属性,接收视图必须具有公共属性。例如,你的 VC 2 应该有一个公共的 NSString。这意味着在您的 .h 文件中声明。然后在您的初始 VC 上,您必须通过 prepareForSegue 方法传递字符串。类似的东西在这里:

    -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    
    
        if ([segue.identifier isEqualToString:@"vc2segue"]) {
    
            UIViewController *vc=segue.destinationViewController;
            vc.publicNstring=self.someTextView.text;
    
        }
    

    }

    【讨论】:

    • 这不是一回事吗?
    • 对不起,和什么一样?。故事板和转场是从一个场景移动到下一个场景以及来回传递数据的标准方式。通过代码调用 viewControllers 已经不常见了。
    【解决方案3】:

    您发布的代码没有任何问题,假设您没有拼写错误并将文本字段和按钮连接到您的第二个视图控制器(发送字符串的那个)并且您已添加故事板 ID 到故事板中的第一个视图控制器 - 请参阅此处 http://sketchytech.blogspot.co.uk/2012/11/instantiate-view-controller-using.html

    假设您也将视图控制器嵌入到导航控制器中,然后在 viewcontrller1.m (viewDidLoad:) 中添加一行代码:

    NSLog(@"%@",self.myString);
    

    应该确认它有效。实际上,我只是用您的代码对其进行了测试,并且可以正常工作。如果您已完成上述所有操作,我的建议是检查拼写错误。

    【讨论】:

    • 是的,我做了所有这些并编写了 nsLog 并打印 Null Thank you
    • 您是否为两个视图控制器分配了正确的自定义类?为 viewcontrollr1 填写 StoryBoard ID 名称?拼写“myTextFlied”的属性与方法相同?将导航控制器作为您的初始视图控制器和 viewcontroller2 连接到它吗?按照 UserAwesome 的建议将 viewcontrollr1 类导入到第二个视图控制器中?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 2019-08-17
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多