带有 tableview 的详细视图控制器的 if 语句

Posted

技术标签:

【中文标题】带有 tableview 的详细视图控制器的 if 语句【英文标题】:if statement for detailedViewController with tableview 【发布时间】:2014-08-27 14:04:59 【问题描述】:

所以我试图在从另一个 tableviewController 推送的 UIViewController 中填充一个 tableview。我知道我必须写一个 if 语句,但我遇到了麻烦......重申一下,我想我的问题是如何在从 tableViewController 推送的详细视图控制器中填充 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

【问题讨论】:

【参考方案1】:

我不会根据导航标题做出您的决定。将标题传递给您的详细视图控件。在 DetailViewController.h 中添加类似的内容

@property (nonatomic, 保留) NSString *selectedTitle;

在您的 if 语句中,检查该值并执行您的条件。

更好的解决方案是创建代表数据的对象并将其传递给详细视图控制器。这将消除您的条件,并使代码更容易添加额外的标题。

我会有一个对象,它有一个 NSString 的标题和一个 NSArray 来显示该位置的图像。然后在您的父视图控制器上,您将拥有一个包含每个对象的 NSArray,这将是您的表数据源。

如果您想进一步分离它,您可以创建一个为您管理数据的类,例如 LocationRepository,您可以有一个方法来创建数组并填充您的数据,这样任何视图控制器都可以获得那个数据。

【讨论】:

好的,谢谢。创建对象是有意义的。所以只是为了澄清一下,如果我的 tableViewController 有 8 个单元格,我将创建 8 个 NSObject 类(标题)......然后在父视图控制器的实现文件中使用一组 NSArray 图像为每个对象创建实例?不要咄咄逼人,但也许一个快速的代码示例可能会有所帮助......我显然是一个初学者。再次感谢! 您的表格单元格数将取决于数组中的项目数,所以是的,如果您的数组中有 8 个对象,那么您将有 8 个单元格。您需要哪些代码方面的帮助?【参考方案2】:

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
   

希望它能帮助回答您关于 if 语句的问题。

到您的人口问题。在您的代码中有一些 _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;

【讨论】:

以上是关于带有 tableview 的详细视图控制器的 if 语句的主要内容,如果未能解决你的问题,请参考以下文章

TableView 作为带有导航控制器的子视图

如何按下 tableview 单元格以在导航控制器中显示带有文本的视图控制器

连接到选项卡栏控制器时,TableView 不会切换到详细视图

将数据从 Tableview 传递到 Tableview 详细信息

我如何知道在详细视图中选择了 tableview 中的哪个单元格?

带有 fetchedResultsController 的 Tableview 在应用重新启动或视图重新加载之前不会更新新内容