Передача строки NSString в UILabel с использованием сценариев раскадровки - PullRequest
3 голосов
/ 03 апреля 2012
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
   NSLog(@"prepareForSegue: %@", segue.identifier);
   if([segue.identifier isEqualToString:@"returnText"])
   {   
      [segue.destinationViewController setText:@"New String"];
   }
}


-(void)setText:(NSString*)transferString;
{
   NSString* result = [NSString stringWithFormat:@"%@", transferString];
   NSLog(@"Got transfer %@", result);
   //Prints correct string
   LabelText.text=result;
   NSLog(@"Labeltext %@\n",LabelText.text);
   //NSLog outputs null
   //Doesn’t update the label
 }

Я хочу, чтобы ярлык обновлялся новым текстом после переключения ...

1 Ответ

8 голосов
/ 03 апреля 2012

Попробуйте это:

// In your destination controller .h file
@property (nonatomic, copy) NSString *transferStr;

// In your destination controller .m file
@synthesize transferStr;

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.LabelText.text = self.transferStr;
}

// In your first controller .m file
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
   NSLog(@"prepareForSegue: %@", segue.identifier);
   if([segue.identifier isEqualToString:@"returnText"])
   {   
      [segue.destinationViewController setTransferStr:@"New String"];
   }
}

Проверено и работает ...

Не забудьте включить файл .h конечного контроллера в ваш первый контроллер.

Проблема, вероятно, в том, что UILabel еще не создается при вызове метода prepareForSegue, поэтому в это конкретное время он равен нулю ...

...