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 字体大小不会改变,而颜色会改变