如何在xcode中访问其他viewcontrollers变量/属性

时间:2012-06-08 08:20:37

标签: objective-c ios4 xcode4 uiviewcontroller xcode4.2

我知道以前曾问过类似的问题,但请耐心等待,因为我在Objective C上是全新的(对C有很好的了解)。

我的情况是我有一个带有两个窗口的标签栏控制器。当我按下“秒”中的按钮时,我更改了变量changeName。我想在我的“第一个”视图控制器中使用changeName的值,但偶然发现了一些问题:

为了到达另一个viewcontroller我从SO发现了这个(不幸的是我忘了在哪里):

-(NSString *)newName{

// Create a UIStoryboard object of "MainStoryBoard_iPhone" named storyboard
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:(NSString *)@"MainStoryBoard_iPhone" bundle:(NSBundle *)nil];

// Create a UIViewController object of the wanted element from MainStoryBoard_iPhone
UIViewController *secondview = [storyboard instantiateViewControllerWithIdentifier:(NSString *)@"secondBoard"];

return secondview.changeName;
}

我的第一个。 MainStoryBoard_iPhone是.xib / storyboard-file的名称。

但没有。错误说

Property 'changeName' not found on object of type 'UIViewController *'

在我的第二个小时里,我有

 @property (readwrite, retain) NSString *changeName;

并在second.m

 @synthesize changeName;

所有帮助都表示赞赏,但请记住,我只使用了OOP两天。 提前谢谢大家

编辑:我应该在这里输入什么?

 - (void)viewDidLoad
{
[super viewDidLoad];
mylabel.text = Name; // or [mylabel.text Name] or something? 
}

2 个答案:

答案 0 :(得分:5)

您需要将返回的视图控制器强制转换为自定义的第二个视图控制器(因为UIViewController没有属性changeName)。

请执行以下操作:

// Create a UIViewController object of the wanted element from MainStoryBoard_iPhone
SecondViewController *secondview = (SecondViewController *)[storyboard instantiateViewControllerWithIdentifier:(NSString *)@"secondBoard"]; 

我假设SecondViewController是第二个控制器的名称。

答案 1 :(得分:0)

在我的情况下,我想从FirstViewController传递一个字符串,在SecondViewController中设置一个文本字段,所以:

1-在SecondViewController.h中

  

@property(强,非原子)IBOutlet UITextField * someTextField; //这是链接到UITextField

2-在FirstViewController.m中:

  

#import“SecondViewController.h”

3-按下FirstViewController中的按钮后,我将执行此操作:

  

SecondViewController * SecondView = [[SecondViewController alloc]   initWithNibName:@“SecondViewController”bundle:nil];

     

//设置字段值

    SecondView.someTextField.text = @"HeLLO from First";


UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController: SecondView];                  
     

//显示AdView

   [self.navigationController presentViewController:nav animated:YES completion:nil];

4-就是这样!

5-有一种情况,如果我在FirstViewController中并希望以相同的方式在SecondViewController中设置字符串属性,那么在你按下SecondViewController中的某个按钮之前,该字符串将不会获取该值,它不会像在viewDidLoad中那样得到它!不知道为什么。