Как установить свойство на раскадровке UIViewController между segues на iOS 5? - PullRequest
3 голосов
/ 03 апреля 2012

Я пытаюсь установить простое изображение в UIImageView как таковое при нажатии кнопки в первом представлении:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{
    ImageViewController *imageViewController = [segue destinationViewController];
    imageViewController.title = @"test";
    imageViewController.imvBig.image = [UIImage imageNamed:@"test.png"];
    imageViewController.lblTest.text = @"test2";
}

.title устанавливается и выглядит просто отлично, но по какой-то причине я не могу отобразить imvBig.image, а также не могу отобразить текст метки. Да, у меня есть свойство, созданное с помощью Outlet и т. Д. (Так как я просто перетащил его из IB прямо в код, и оно было создано автоматически).

Может кто-нибудь сказать мне, как правильно установить свойство из одного обычного представления в другое в настройке раскадровки?

Ответы [ 3 ]

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

Похоже, я смог заставить это работать, создав свойство NSString, а затем присвоив метке строку для viewDidLoad объекта ImageViewController:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    self.lbltest.text = _myString;
}

Я не могу установить свойствонапрямую, пока не будет загружен вид.

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

Возможно, ImageViewController еще не загрузил свои представления из раскадровки, когда система отправляет prepareForSegue:sender:, поэтому эти выходы (imvBig и lblTest) равны нулю.Сообщения, отправленные на nil, молча игнорируются.

Обычно контроллер исходного представления не подходит для просмотра представлений контроллера-получателя.Контроллер вида назначения должен установить настройки этого вида, обычно в viewDidLoad, viewWillAppear: или viewDidAppear:.

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

Вам не нужно устанавливать viewController, просто используйте свойство segue destinationViewController.Сначала я всегда устанавливаю идентификатор в раскадровке, чтобы я мог использовать несколько сегментов:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{
if ([[segue identifier] isEqualToString:@"Show ImageViewController"]) {

[segue.destinationViewController setTitle:@Test"];
[segue.destinationViewController setFoo:@"Bar"];
//More stuff to set
}

}

также создайте изображение в ImageViewController в качестве свойства и синтезируйте его, а затем установите для него значениепредставление изображения в viewDidAppear:

self. imvBig.image = myNewImge;//this in the viewDidLoad

И установите это изображение в следующей последовательности:

[segue.destinationViewController setMyImage:[UIImage imageNamed@"test.png"]];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...