UILabel 不会改变屏幕

Posted

技术标签:

【中文标题】UILabel 不会改变屏幕【英文标题】:UILabel won't change off screen 【发布时间】:2014-07-08 19:24:02 【问题描述】:

我有一个问题,我已经尝试解决了几天。从技术上讲,我正在尝试从另一个视图中的按钮中的触发器更改一个视图中的 UILabel 文本。当按钮在 UILabel 所在的视图中时,标签更改没有问题。但是当将触发器分配给另一个视图中的按钮时(即使使用相同的 ViewController 类),它不会更改 UILabel 的文本。

这是在两种情况下触发我的按钮的代码。

- (IBAction)getYearMonth:(UIButton*)sender 

//NSLog(@"Date: %@ 1 %@", sender.titleLabel.text, self.year.text);

//evenCon.eventsCurrentDate.text = @"";

//NSLog(@"%@", evenCon.eventsCurrentDate.text);

//string = sender.currentTitle;
eventsCurrentDate.text = @"hello";

请原谅我在 Objective-c 方面的知识,我是两周前开始学习的。

编辑:我想我需要添加这个。我的视图显示没有segues,它们是主视图控制器中滚动视图的子视图。 (有点像 snapchat 应用效果)

- (void)viewDidLoad

[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//FBLoginView *loginView = [[FBLoginView alloc] init];

//loginView.frame = CGRectOffset(loginView.frame, (self.view.center.x - (1)), 517);
//[self.loginView addSubview:loginView];

[self.scrollView setPagingEnabled:YES];
[self.scrollView setScrollEnabled:YES];
[self.scrollView setShowsHorizontalScrollIndicator:NO];
[self.scrollView setShowsVerticalScrollIndicator:NO];
[self.scrollView setDelegate:self];


[self addChildViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"View1"]];
[self addChildViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"View2"]];
[self addChildViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"View3"]];

“View1”是我要更改的标签所在的位置,“View2”是我的按钮所在的位置。

【问题讨论】:

您是否尝试过setNeedsDisplay 或类似的方法来告诉它在出现时重绘?只是在黑暗中开枪抱歉。 仔细检查以确保 IBOutlet 已连接且 eventsCurrentDate 不是 nil 尝试使 UILabel 强大且非原子,如果失败,如果可能的话,如果您发布视图和故事板的代码会更好。 - (IBAction)getYearMonth:(UIButton*)sender 中放置一个断点并确保始终调用该方法。并验证标签不是@DBD 建议的nil @kambala 我之前做了一些 NSLog 打印来检查它是否正常工作,并且确实有效。我也刚刚做了一个断点,它可以工作。这个问题真的让我很困惑。 【参考方案1】:

发生这种情况是因为您没有将任何数据发送到另一个视图。从 Xcode 下载 Master detail 示例代码(在添加新项目中)。查看他们如何将数据传输到另一个视图控制器,然后在您的标签中显示文本

【讨论】:

我对我的问题做了一个小小的修改。我没有像主细节示例那样使用任何 segues,我的视图是主视图控制器下 uiscrollview 的子视图。 你可以试试 UINotificationCenter。我明白,在视图控制器之间传递数据有些时候太棘手了,但 UINotificationCenter 总是对我有用。有很多关于使用 UINotificationCenter 传递数据的教程 哦,我刚看到你的代码。尝试使用 segue,因为您可以轻松地通过 segue 传递数据。一般来说,我不建议在需要传递数据时使用“instantiateViewControllerWithIdentifier”。 我希望我可以避免这种情况,因为我的应用程序需要滚动视图。也许您可以指出我与使用 segues 左右滚动视图具有相同的效果? 就像你说的,使用 segues 效果很好。我只需要重新调用主滚动视图,就可以刷新所有视图。现在我有点害怕堆栈溢出,但我稍后会担心。谢谢。【参考方案2】:

你需要使用 setText

[_eventsCurrentDate setText:@"hello"];

【讨论】:

那不会有什么不同。

以上是关于UILabel 不会改变屏幕的主要内容,如果未能解决你的问题,请参考以下文章

XIB 中的 UILabel 字体大小不会改变,而颜色会改变

Swift font.withSize 不会改变 UILabel 上的字体大小

UILabel 文本不会显示

IOS - 当滑块值改变时设置 UILabel Swift

UILabel 不会显示在应用程序中

iOS:根据 View 位置动态改变 UILabel Alignment