Я использую раскадровку и IOS 6.1, я инициируя представление, как это:Как обновить UILabel из другого ViewController
PropertiesViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"Properties"];
PropertiesViewController
имеет высоту 60px viewn включая некоторые этикетки и многие другие. Я хочу добавить эти представления к другому 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
и фоновый является UIImageView
.The Проблема в том, ни один из элементов зрения никогда не обновляются за пределами PropertiesViewController
. addSubview:
просто добавляет, как его создание, не позволяет настраивать.
Я уже проверил подход NSNotificationCenter
, если я не ошибаюсь, это не обновление экземпляров. И я уже добавил метод класса приемника для обновления меток внутри PropertiesViewController
. Это даже не сработало.
Что я делаю неправильно?
Примечание: Вы можете спросить, почему именно я не использую TableView
. Там должны быть более динамичные ресурсы, и их, кроме того, не ясно. Существует также одно, что TableView невозможно с помощью ScrollView, в некоторых случаях я никогда не использую TableView, поэтому scrollview будет управлять прокруткой.
Любая помощь будет отличной.
EDIT:
Согласно ответу Kalpesh здесь то, что я сделал:
В моем отправителе контроллере представления:
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];
}
, а также делать это в dealloc '[[NSNotificationCenter defaultCenter] removeObserver: сам];' – croyneaus4u
Спасибо, но не смог получать уведомление, даже если я добавил строку журнала. Нет ошибок, никаких предупреждений, но все равно не удалось обновить. Я использую метод postNotificationName вместо текста assingnin, это правда? –
ДА, вы можете использовать postNotification, и это определенно будет работать. Я применяю то же самое в своем приложении. Можете ли вы сказать мне, что метод changetext должен быть вызван или нет. поставить точку останова и проверить ее. – Kalpesh