gpt4 book ai didi

ios - 如何从另一个 ViewController 更新 UILabel

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:30:59 24 4
gpt4 key购买 nike

我正在使用 Storyboards 和 iOS 6.1,我正在启动这样的 View :

PropertiesViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"Properties"]; 

PropertiesViewController 的高度为 60 像素,包括一些标签等。我想将这些 View 添加到另一个 ScrollView 作为 subview 。这是我在做什么:

controller.leftLabel.text = @"Test";
controller.background.image = [UIImage imageNamed: @"someimage.png"];
controller.view.frame = CGRectMake(0, currentHeight, controller.view.frame.size.width, cellHeight);
[self.scrollView addSubview: controller.view];

leftLabel 是一个 UILabel,backgorund 是一个 UIImageView。问题是没有一个 View 的元素不会在 PropertiesViewController 之外更新。 addSubview: 只是按照创建的方式添加,不允许配置。

我已经检查了 NSNotificationCenter 方法,如果我没记错的话,这与更新实例无关。而且我还已经向接收器类添加了一个方法来更新 PropertiesViewController 内的标签。那甚至没有用。

我做错了什么?

注意:您可能会问为什么我不使用 TableView。必须有更多的动态资源,而且它们的内容尚不清楚。还有一件事是 TableView 无法使用 ScrollView,在某些情况下我从未使用过 TableView,因此 scrollview 将管理滚动。

任何帮助都会很棒。

编辑:

根据 Kalpesh 在这里的回答,我做了什么:

在我的发送者 View Controller 中:

PropertiesViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"Properties"]; 
[[NSNotificationCenter defaultCenter] postNotificationName:@"update" object:@"Test string"];

controller.view.frame = CGRectMake(0, currentHeight, controller.view.frame.size.width, cellHeight);
// not sure how but I can change frame successfully.
[self.scrollView addSubview: controller.view];

这是接收器:

- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"Called"); // Working fine

[[NSNotificationCenter defaultCenter] removeObserver:self];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changetext:) name:@"update" object:nil];

//even if set some object, nothing changed
}

- (void) changetext:(NSNotification *)notification {
NSLog(@"Received"); // Not working
leftLabel.text = [notification object];
}

最佳答案

试试这个,当你想改变文本标签时,你必须从其他 View Controller 发送通知 ..

 [[NSNotificationCenter defaultCenter] postNotificationName:@"changetext"        object:stringobj];

在主视图 Controller 中

  -(void)viewDidLoad

{
[[NSNotificationCenter defaultCenter] removeObserver:self];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changetext:) name:@"changetext" object:nil];

}

- (void) changetext:(NSNotification *)notification
{
NSString * text =[notification object];
lbl.text=text;

}

关于ios - 如何从另一个 ViewController 更新 UILabel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14852469/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com