2014-02-03 4 views
0

Я пишу программу для удовольствия, и в ней у меня есть UIViewController с четырьмя кнопками, все они отправляют пользователя на другой вид, но в зависимости от того, какая кнопка нажата, мне нужна метка в этом другом представлении иметь другой текст. Для этого я решил, что текст метки будет установлен равным переменной NSString, и эта переменная будет установлена ​​на определенный текст в зависимости от того, какая кнопка нажата. Так что у меня есть это:Set Текст ярлыка равен переменной

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
UIViewController *vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"resultScreen"]; 
[self presentViewController:vc animated:YES completion:nil]; 
_myLabel.text = [NSString stringWithFormat:myText]; 

В которой myText является NSString переменным Я хочу, чтобы метка, чтобы быть установлена.

Все, кажется, в порядке, но на этикетке не будет изменен текст. Если я попытаюсь изменить его текст внутри функции viewDidLoad, тем не менее, он работает отлично, поэтому я не знаю, что происходит.

Любая идея о том, что мне может понадобиться? Если вам нужна дополнительная информация, просто прокомментируйте, что вы хотите, и я постараюсь ее предоставить.

+0

Просто из любопытства, попробуйте следующее: '_myLabel.text = [NSString stringWithFormat: @ "% @", MYTEXT];'. Он делает то же самое, иначе иначе – Jojodmo

+5

@ Domenico не нужно использовать stringWithFormat. Просто выполните '_myLabel.text = myText;' – rmaddy

+0

Где объявляется '_myLabel'? Это в 'resultScreen'? –

ответ

0

Я думаю, вам нужно установить свойство вашего ViewController в перед вызовом:

[self presentViewController:vc animated:YES completion:nil]; 

Если вы установите после представления точки зрения, вы должны вручную обновить вид, который является немного излишним. Просто установите его перед представлением представления. Так это будет выглядеть:

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
ResultScreenViewController *vc = (ResultScreenViewController *)[mainStoryboard instantiateViewControllerWithIdentifier:@"resultScreen"]; 
vc.customTitleLabel.text = [NSString stringWithFormat:myText]; 
[self presentViewController:vc animated:YES completion:nil]; 

В файле заголовка ViewController:

@property (nonatomic, strong) UILabel *customTitleLabel; 
+0

если я пишу 'vc.customTitleLabel.text', возникает эта проблема:' Свойство 'customTitleLabel' не найдено на объекте типа 'UIViewController *' ' – AugustoQ

+0

Ну, вам нужно выставить свойство в файле заголовка ViewController« resultScreen ». @property (неатомный, сильный) UILabel * customTitleLabel; Затем вам нужно направить свой ViewController на нужный тип, который должен выглядеть так: ResultScreenViewController * vc = (ResultScreenViewController *) [mainStoryboard instantiateViewControllerWithIdentifier: @ "resultScreen"]; => Отредактированный ответ. –

+0

Он по-прежнему не работает: / – AugustoQ

0

Первый Создайте подкласс UIViewController с пользовательской меткой:

@interface NextViewController : UIViewController 
@property (nonatomic, strong) UILabel* customLabel 
@end 

Теперь вернемся к коду , Вы просто бросаете UIViewController, который вы получаете в подкласс, который вы создали, чтобы вы могли получить доступ к метке внутри вашего контроллера.

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
NextViewController* nextVC = (NextViewController*)[mainStoryboard instantiateViewControllerWithIdentifier:@"resultScreen"]; 
nextVC.customLabel.text = [NSString stringWithFormat:myText]; 
[self presentViewController:nextVC animated:YES completion:nil]; 
0

Хорошо, с помощью одного из ответов здесь я нашел решение, которое работает для меня. Раньше, когда я был

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
UIViewController *vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"resultScreen"]; 
[self presentViewController:vc animated:YES completion:nil]; 
_myLabel.text = [NSString stringWithFormat:myText]; 

Я не понимал, что resultScreen не был связан с UIViewController, но ViewContronller. Так что все, что мне нужно сделать, это изменить объявление Биотех

ViewController *vc = (ViewController *)[mainStoryboard instatiateViewControllerWithIdentifier:@"resultScreen:]; 

Итак все, что мне нужно сделать, это изменить текст лейбла на модуле ViewDidLoad. Сейчас это работает отлично.

0

Его простой ..

if ([_mylabel.text isEqualToString: myText) 
    { 
     //--- Now process your method here. Show alert or what else you need 
    } 
0

попробовать это. Я думаю, что доступ к UIlabel напрямую из другого UIViewController - не очень хороший подход. Следуйте за этим &, это определенно будет работать.

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
resultScreen *vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"resultScreen"]; 
vc.strText = myText; 
[self presentViewController:vc animated:YES completion:nil]; 

В контроллере представления resultScreen создать NSString свойство.

resultScreen.ч

@property (retain, nonatomic) NSString *strText; 

resultScreen.m

-(void)viewDidLoad 
{ 
    self.myLabel.text = self.strText; 
} 
0

вы пытаетесь установить LabelText перед представлением второго вида. Перед загрузкой изображения в память все его розетки равны нулю. поэтому используйте переменную NSString во втором представлении и попытайтесь установить значение этой переменной, а затем в viewWillAppear: метод присваивает значение переменной string методу tagText, это определенно будет работать.

Cheers!

1

Вы не можете обновить пользовательский интерфейс другого контроллера от текущего - вы можете установить переменные и позже в viewDidLoad или viewWillAppear вы можете присвоить эти значения UI

В Файл: FirstViewController.m

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
SecondViewController *vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"SecondViewController"]; 
vc.passedText = @"Hello Next"; 

[self.navigationController pushViewController:vc animated:YES]; 

В Файл: SecondViewController.h

@interface SecondViewController : UIViewController 
@property (strong, nonatomic) IBOutlet UILabel *myLabel; 

@property (strong, nonatomic) NSString *passedText; 

В Файл: SecondViewController.m

-(void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:YES]; 

    self.myLabel.text = self.passedText; 

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