将UIlabel中的数据从一个视图控制器发送到另一个视图控制器

时间:2014-01-29 21:50:54

标签: ios objective-c uilabel

我有两个视图控制器

DetailViewController

BlogViewController

我在故事板上设置了“推送”设置标识符“ShowBlog”

我需要从 DetailViewController 下面的UILabel发送博客的标题:

@property (strong, nonatomic) IBOutlet UILabel *TitleLabel;

到名为BlogTitleLabel的 BlogViewController 上的UILabel:

@property (strong, nonatomic) IBOutlet UILabel *BlogTitleLabel;

我知道我需要使用:

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

        // Im struggling with the code

    }
}

但我正在努力使用代码进入其中

3 个答案:

答案 0 :(得分:2)

使用NSUserDefaults代码如下:

存储标题:

[[NSUserDefaults standardUserDefaults] setObject:label.title forKey:@"nameForStoredVariableHere"];
[[NSUserDefaults standardUserDefaults] synchronize];

检索存储的标题:

 NSString *storedTitle = [[NSUserDefaults standardUserDefaults] objectForKey:@"nameForStoredVariableHere"];

之后,您可以随意使用标题

答案 1 :(得分:2)

在目标VC的prepareForSegue之前调用

viewDidLoad,因此不要尝试访问prepareForSegue中目标视图控制器的任何视图对象。最好在目标中创建一个字符串属性,并在prepareForSegue方法中设置它。在目标viewController的viewDidLoad中,将其设置为label

答案 2 :(得分:2)

您不应尝试将数据从标签发送到标签。标签是视图对象。它们显示信息并收集用户的输入。他们不存储信息。

此外,您永远不应该尝试直接操纵另一个视图控制器的视图。这违反了其他视图控制器的封装。

两个视图控制器都应具有NSString属性。我们在两个VC上称之为blogTitle。

你的DetailViewController应该在设置过程中将它设置为blogTitle,然后在viewWillAppear:animated中显示该值为titleLabel outlet:

- (void) viewWillAppear: animated;
{
  [super viewWillAppear: animated];
  self.titleLabel.text = self.blogTitle;
  //your other code here
}

然后,在你的prepareForSegue中:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{
  if ([[segue identifier] isEqualToString:@"ShowBlog"]) 
  {
    BlogViewController *theBlogController = [segue destinationViewController];
    theBlogController.blogTitle = self.blogTitle; //Pass the blog title to the other VC
  }
}

然后在BlogViewController的viewWillAppear中,将blogTitle复制到它的标题标签:

- (void) viewWillAppear: animated;
{
  [super viewWillAppear: animated];
  self.titleLabel.text = self.blogTitle;
  //your other code here
}

请注意,Cocoa / iOS编程具有强大的命名约定,您应该遵循这些约定。只有文件名和类名应以大写字母开头。方法名称,实例变量名称和属性名称应以小写字母开头。所以你的TitleLabel应该是titleLabel,而BlogTitleLabel应该是blogTitleLabel。