【问题标题】:How to change a label text on one ViewController from another ViewController如何从另一个 ViewController 更改一个 ViewController 上的标签文本
【发布时间】:2016-03-29 08:08:53
【问题描述】:

在 viewOne 我有 labelOne 和 labelOne 有文本。我想在 viewTwo 中的 labelTwo 从 labelOne(在 viewOne 中)获取它的文本。

我将如何实现这一目标?

更多信息 - 我有两个由 UIPageViewController 控制的独立视图控制器。

【问题讨论】:

  • 对于标签,我可能只是在 ViewController 中创建一个帮助方法,它同时更新两个标签并用于设置值,以便它们始终保持同步。如果您使用的是 UITextField,您还可以考虑绑定到 UITextFieldDelegate 以在第一个字段更新时更新第二个字段。
  • 在 viewTwo 类 labelTwo.text = viewOne.lableOne.text
  • 好的。所以在两个 viewControllers 中创建一个 NSString 属性,该属性存储您要显示的标签的值。我在 rootViewController 中看到了两个方法,即 goToPreviousContentViewControllergoToNextContentViewController。检查您检索的 viewController 是否属于 camController 类型。如果是这样,请将camController 的相应属性设置为landingVC 中属性的值。应该这样做。
  • 还有@Ro4ch。这是 Objective C 中一个非常基本的问题。在 viewControllers 之间传递数据就像stackoverflow.com/a/36280799/2954866 提到的那样简单。 prepareForSegue 只是一个回调,显示视图场景即将改变。对于您的应用程序,goToPreviousContentViewControllergoToNextContentViewController 方法用作回调。在这两种情况下,传递数据的基本方式保持不变。
  • 请转至stackoverflow.com/a/9736559/2954866以便更好地了解。

标签: ios objective-c xcode uiview


【解决方案1】:

你可以给 UILabel 添加一个标签,然后使用

UILable *l = ((UILable*)view.viewWithTag)

从视图中获取标签

或在其子视图中迭代检查是否找到 UILabel

for (UIView *subview in view.subviews)
    {
        if ([subview isKindOfClass:[UILable class]) {
             UILable *l =  (UILable *)subview;
        }
    }

【讨论】:

    【解决方案2】:
    • 在情节提要中选择第一个视图控制器,然后选择控制 将从第一个视图拖到第二个视图控制器

    • 从您看到的列表中选择推送。

    • 选择两个视图之间新添加的行 控制器。

    • 为其指定名称。(如“PushSegue”)

    在您的第一个视图控制器中添加代码单击按钮。

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

    然后为 PrepareForSegue 添加委托

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    {
       if ([[segue identifier] isEqualToString:@"ListMenuSegue"])
       {
        SecondViewController *SecondVC = [segue destinationViewController];
        userViewController.Lable_String=@"Text_to_send";  //You will Get error here for Lable_String ->"Property not found etc" Becuse 
       }  
    

    在您的 secondViewController.h 中添加此代码

    @property(strong,nonatomic)NSString *Lable_String;
    

    然后在 secondViewController.m 中打印字符串值

    - (void)viewDidLoad 
    {
       [super viewDidLoad];
       NSLog(@"%@",Lable_String);
    }
    

    【讨论】:

    • 感谢您的帮助。我忘了提到我有两个由 UIPageViewController 控制的视图控制器。使用 UIPageViewController 而不是 segue 时,您有可能的解决方案吗?
    【解决方案3】:

    您可以通过在 viewTwo 中创建 label 的属性来完成。当您将在 viewOne 中执行 segue 时,然后将 labelOne 文本分配给 viewTwo 的 label 属性。在 viewTwo didLoad 方法从属性标签中获取文本并将这些文本提供给 viewTwo 的 labelTwo .

    【讨论】:

    • 感谢您的回复。我在我的问题中添加了更多信息,但我有两个视图控制器由 UIPageViewController 控制,并且我没有 segues 存在。
    • 那么你有另一个选择,那就是在共享类中创建标签属性,并在 viewOne 中将 labelOne 的文本分配给共享类的标签,并在整个应用程序中访问该共享类的标签文本。
    【解决方案4】:

    你可以给每个标签像

    labelOne.tag = 1001;
    

    在viewTwo类中,可以得到labelOne

    UILabel *labelOne = (UILabel *)[self.superview viewWithTag:1001];
    

    如果 viewOne、viewTwo 都添加到同一个视图/视图控制器上,这将起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-19
      • 1970-01-01
      相关资源
      最近更新 更多