【问题标题】:Changing text of IBOutlet UILabel via delegate通过委托更改 IBOutlet UILabel 的文本
【发布时间】:2014-05-30 13:48:34
【问题描述】:

我正在尝试更改通过 Storyboard 创建的 UILabel 的文本。我有两个 ViewController,FirstViewController 和 SecondViewController。我关闭了 SecondViewController,调用了 SecondViewController 中的方法,在 FirstViewController 中调用了委托方法,但 UILabel 为 nil。 知道为什么吗?

第二视图控制器

-(void)back {
    [self.navigationController popToRootViewControllerAnimated:YES];  
    [self.delegate points:@"10"];
}

FirstViewController

-(void)points:(NSString *)point {
     labelPoints.text = [NSString stringWithFormat:@"Points: %@", point]; 
}

【问题讨论】:

  • 检查 labelPoints 是否为零?
  • 我就是这么说的。它是零。但为什么呢?
  • 你链接你的 IBOutlet 了吗?
  • 是的,它是链接的。当我的 viewDidLoad 方法中有断点时,'labelPoints' 不是 nil
  • 可能是因为你没有显示在屏幕上?

标签: objective-c uilabel


【解决方案1】:

你的 FirstViewController 是 rootViewController 吗?否则推送到 rootViewController 将从堆栈中删除 First ViewController。从 Second View Controller 首先调用委托,然后调用 popViewController,如下所示。

 -(void)back {
    [self.delegate points:@"10"];
    [self.navigationController popViewControllerAnimated:YES];  

 }

【讨论】:

  • 这是我的 rootViewController,不过两者都可以。首先调用委托,然后弹出视图控制器不会改变任何东西。
  • 您能否发布代码以说明如何在第一视图中创建标签?是在界面生成器中还是在代码中?
  • 界面生成器 - 它是一个 IBOutlet
【解决方案2】:

您在设置值之前弹出 VC。我会像这样从您的委托对象中弹出:

-(void)back { 
     [self.delegate points:@"10"];
    }

-(void)points:(NSString *)point {
    labelPoints.text = [NSString stringWithFormat:@"Points: %@", point];
    [self.navigationController popToViewController:self animated:YES];
}

如果这不能解决问题,那么您可能还有除此之外的另一个问题,并且必须发布更多代码。

【讨论】:

    【解决方案3】:

    在 UILabel 中设置文本的延迟对我有用

    例如当委托调用这样的方法时:

    [self.delegate selectedAttendee:dictAttendee];
    [self.navigationController popViewControllerAnimated:YES];
    

    这对我不起作用:

    -(void)selectedAttendee:(NSDictionary *)dictAttendee
    {
      lblMessageTo.text = [dictAttendee objectForKey:@"name"];
    }
    

    解决方案

    -(void)selectedAttendee:(NSDictionary *)dictAttendee
    {
      [self performSelector:@selector(addTextInMessageTo:) withObject:dictAttendee afterDelay:0.3];
    }
    
    -(void)addTextInMessageTo:(NSDictionary *)dictAttendee
    {
       lblMessageTo.text = [dictAttendee objectForKey:@"name"];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-07
      • 2018-08-26
      • 1970-01-01
      • 2012-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多