2014-08-27 2 views
0

Так что я пытаюсь заполнить таблицу в UIViewController, который выталкивается из другого tableviewController. Я знаю, что мне нужно написать оператор if, но у меня проблемы с этим ... Повторю, я думаю, мой вопрос в том, как вы заполняете tableView в detailViewController, вытолкнутом из tableViewController? См. Приведенный ниже код для ссылки, и я заранее извиняюсь, если я не предоставил все необходимое, я могу полностью возглавить неправильное направление с этим ...if statement for detailViewController with tableview

Спасибо за любой вход!

/* DetaiLViewController.m file */ 

#import "DetaiViewController.h" 
#import "RecommendationsCell.h" 

/* .......... */ 

- (void)viewDidLoad 

{ 
    [super viewDidLoad]; 

    // Do any additional setup after loading the view. 
    self.navigationItem.title = _DetailModal[0]; 


    /*WHAT IS THE IF STATEMENT ???!! */ 
     if ([self.navigationItem.title isEqualToString: @"London, United Kingdom"]) { 

     DetailedImages.image = /* HERE IS AN ARRAY OF London IMAGES to DISPLAY ON DETAILEDVIEWCONTROLLER */ 

    IF.... 
     DetailedImages.image = /* HERE IS AN ARRAY OF LONDON IMAGES to DISPLAY ON DETAILEDVIEWCONTROLLER */ 

    IF.... 
     DetailedImages.image = /* HERE IS AN ARRAY OF BERLIN IMAGES to DISPLAY ON DETAILEDVIEWCONTROLLER */ 

    IF... 
DetailedImages.image = /* HERE IS AN ARRAY OF PERTH IMAGES to DISPLAY ON DETAILEDVIEWCONTROLLER */ 

    IF... 
THE REMAINING ARRAYS FOR EACH CELL FROM TABLEVIEWCONTROLLER ETC....... 
           ]; 
    } 



/* HERE IS ARRAY FROM TABLEVIEWCONTROLLER THAT PUSHES TO DETAILEDVIEWCONTROLLER */ 
/* _Images = @[@"london.jpeg", 

       @"berlin.jpeg", 

       @"perth.jpeg", 

       @"beijing.jpeg", 

       @"Madrid-26512.jpg", 

       @"barcelona.jpeg", 

       @"norway1_2141015b.jpg", 

       @"sweden.jpeg",]; */ 


/* HERE IS ARRAY FROM TABLEVIEWCONTROLLER THAT PUSHES TO DETAILEDVIEWCONTROLLER */ 
/* _Title = @[@"London, United Kingdom", 

       @"Berlin, Germany", 

       @"Perth, Australia", 

       @"Beijing, China", 

       @"Madrid, Spain", 

       @"Barcelona, Spain", 

       @"Oslo, Norway", 

       @"Denmark, Sweden",]; */ 

} 

- (void)didReceiveMemoryWarning 

{ 

    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 

} 



#pragma mark - Table view data source 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 

{ 

    // Return the number of sections. 
    return 1; 

} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 

{ 
    // Return the number of rows in the section. 
    return _Title.count; 

} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

{ 
    static NSString *CellIdentifier = @"RecommendationsCell"; 
    RecommendationsCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];  

    // Configure the cell...  

    int row = [indexPath row]; 

    cell.TitleLabel.text = _Title[row]; 
    //cell.DescriptionLabel.text = _Description[row]; 
    cell.ThumbImage.image = [UIImage imageNamed:_Images[row]]; 

    return cell; 
} 




/* DetailedViewController.h file */ 

@interface DetaiViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> 

{ 
    IBOutlet UIImageView *DetailedImages; 
} 

//@property (nonatomic, strong) NSArray *Description; 
@property (nonatomic, strong) NSArray *Title; 
@property (nonatomic, strong) NSArray *Images; 

@property (strong, nonatomic) NSArray *DetailModal; 

@end 



/* DetailedViewController Cell.h file */ 

@interface RecommendationsCell : UITableViewCell 

@property (strong, nonatomic) IBOutlet UILabel *TitleLabel; 
@property (strong, nonatomic) IBOutlet UIImageView *ThumbImage; 
//@property (strong, nonatomic) IBOutlet UILabel *DescriptionLabel; 

@property (strong, nonatomic) IBOutlet UIImageView *DetailedImages; 

@end 

ответ

0

Я бы не основывать свое решение на названии навигации. Передайте заголовок вашему элементу управления подробным представлением. Добавьте что-то подобное в DetailViewController.h

@property (nonatomic, сохранить) NSString * selectedTitle;

В вашем операторе if проверьте это значение и выполните свое условие.

Лучшим решением было бы создание объектов, которые представляют ваши данные, и передать их вашему контроллеру подробных представлений. Это устранит ваши условности и упростит добавление дополнительных заголовков в код.

У меня был бы объект с NSString для заголовка и NSArray для изображений, отображаемых для этого местоположения. Затем на контроллере родительского представления у вас будет NSArray, у которого есть каждый из этих объектов, и это будет ваш источник данных таблицы.

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

+0

Хорошо, спасибо. Создание объектов имеет смысл. Поэтому просто для уточнения, если в моем TableViewController было 8 ячеек, я бы создал 8 классов NSObject (заголовки) ... а затем создавал экземпляры для каждого объекта с набором изображений NSArray в файле реализации родительского контроллера представления? Не быть настойчивым, но, возможно, быстрый пример кода может помочь ... Я, очевидно, новичок. Еще раз спасибо! – user3708224

+0

Количество ваших элементов подсети будет зависеть от количества элементов в вашем массиве, так что да, если у вас есть 8 объектов в вашем массиве, у вас будет 8 ячеек. Какой код вам нужен? –

0

Оператор if должен предоставить некоторое условие для кода между {}. В вашем случае, когда ваш navigationItem.title будет «London, United Kingdom», весь код в {} будет обработан. Вы можете придать больше условия следующим образом:

if ([self.navigationItem.title isEqualToString: @"London, United Kingdom"]) { 
    //do this 
    DetailedImages.image = /* HERE IS AN ARRAY OF London IMAGES to DISPLAY ON DETAILEDVIEWCONTROLLER */ 
    } else if ([self.navigationItem.title isEqualToString: @"Berlin, Germany"]){ 
    //or do this 
    DetailedImages.image = /* HERE IS AN ARRAY OF LONDON IMAGES to DISPLAY ON DETAILEDVIEWCONTROLLER */ 
    } else { 
.......... // if no condition passed do that 
    } 

Надеюсь, что это поможет ответить на ваш вопрос о утверждении.

К вашей проблеме с населением. В вашем коде есть некоторый _Title.count для numberOfRowsInSection. Я не знаю, какой из массива, но:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 

static NSString *CellIdentifier = @"RecommendationsCell"; 
RecommendationsCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];  

Title * title = [self.title objectAtIndex:indexPath.row]; 
Images *image = [self.images objectAtIndex:indexPath.row]; 

cell.TitleLabel.text = title; 
//cell.DescriptionLabel.text = _Description[row]; 
cell.ThumbImage.image = [UIImage imageNamed:image]; 

return cell; 

}