2014-01-21 2 views
0

У меня есть вид таблицы, и когда выбран ряд, вы попадаете на страницу подробностей. На странице подробностей отображается изображение. Я пытаюсь установить изображение для представления изображения из представления таблицы, когда выбрана строка, но когда выбрана строка и отображается подробное представление, нет ничего, кроме белой страницы.Установить UIImageView в другом контроллере представления

Как это:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    GRSBandDetailViewController *detail = [[GRSBandDetailViewController alloc]initWithNibName:@"GRSBandDetailViewController" bundle:nil]; 

    if (indexPath.row == 0) 
    { 
     [detail.bandImage setImage:[UIImage imageNamed:@"AbovetheUnderground.png"]]; 
     [self.navigationController pushViewController:detail animated:YES]; 
    } 

    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
} 

Вот файл .h для GRSBandDetailViewController:

@interface GRSBandDetailViewController : UIViewController 
{ 
    IBOutlet UIImageView *bandImage; 
} 

@property (nonatomic, strong) UIImageView *bandImage; 

@end 
+0

Какой класс является GRSDetailViewController? возможно, добавить к нему свойство UIImage *, а затем в своем представленииDidLoad назначить это изображение на изображение. –

+0

Вам не нужно использовать Segue для передачи данных между двумя разными контроллерами? См. Http://www.raywenderlich.com/16873/how-to-add-search-into-a-table-view – Dinesh

+0

Я добавил код из .h-файла класса детали. Я установил представление изображения в файле xib. – raginggoat

ответ

4

Это происходит потому, что вид загружается лениво, во время первого вызова -[UIViewController view]. Таким образом, при попытке установить изображение detail.bandImage.

Предоставьте UIImage в инициализаторе GRSBandDetailViewController или через собственность. Затем установите bandImage.image на значение этого свойства в viewDidLoad.

+0

Это не работает. – raginggoat

3

Я исправил проблему, добавив ее в контроллер подробного представления.

@property (nonatomic, strong) UIImage *passedImage; 

@property (nonatomic, strong) NSString *titleString; 

И viewDidLoad теперь это:

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

    self.title = titleString; 
    bandImage.image = passedImage; 
} 

Метод didSelectRowAtIndexPath с точки зрения таблицы выглядит следующим образом:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    GRSBandDetailViewController *detail = [[GRSBandDetailViewController alloc]initWithNibName:@"GRSBandDetailViewController" bundle:nil]; 

    if (indexPath.row == 0) 
    { 
     [self.navigationController pushViewController:detail animated:YES]; 
     detail.passedImage = [UIImage imageNamed:@"AbovetheUnderground.png"]; 
     detail.titleString = @"Above the Underground"; 
    } 

    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
} 
+0

Хм ... разве это не то, что я предложил? «Предоставьте UIImage в инициализаторе GRSBandDetailViewController или через свойство. Затем установите для параметра bandImage.image значение этого свойства в viewDidLoad». – jonahb

+2

Я просто говорил, что ваш код не работает. Вы предложили работать, но я отправил свой ответ, чтобы показать код, который работал для меня. Я отметил ваш ответ как принятый ответ. – raginggoat

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