2013-02-13 2 views
2

Я использую раскадровку и 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]; 
} 

ответ

5

Try это, вы должны направить уведомление от o ViewController когда ь еще вы хотите изменить метку текста ..

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

в mainviewcontroller

-(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; 

} 
+0

, а также делать это в dealloc '[[NSNotificationCenter defaultCenter] removeObserver: сам];' – croyneaus4u

+0

Спасибо, но не смог получать уведомление, даже если я добавил строку журнала. Нет ошибок, никаких предупреждений, но все равно не удалось обновить. Я использую метод postNotificationName вместо текста assingnin, это правда? –

+0

ДА, вы можете использовать postNotification, и это определенно будет работать. Я применяю то же самое в своем приложении. Можете ли вы сказать мне, что метод changetext должен быть вызван или нет. поставить точку останова и проверить ее. – Kalpesh

Смежные вопросы