根据行选择选择UITableView

时间:2014-06-11 07:09:42

标签: ios uitableview segue didselectrowatindexpath

我有一个UITableView,其中包含3个项目的数组。在用户选择后,我需要将这三个项中的每一个都转换为不同的UITableView。例如:

第一个场景是包含列表的表格:天气,情报,燃料状态 第二个场景是:

当用户选择天气时,切换到包含阵列“每日地图,火势等”的表格 当用户选择智能时,请转到包含阵列“当前活动火灾,新的初始攻击等”的表格。

等等。

我被告知我可以为每个原型单元使用不同的UITableViewCells,但我确信有一种更简单的方法,我根本就没有抓住。所有当前的segues都是在storyboard中完成的。有人可以详细说明我应该如何从一个场景到另一个场景(在初学者 - 中级水平的理解中)吗?

#import "PSMenu_TableViewController.h"
#import "WXMenu_TableViewController.h"
#import "PSTableViewCell.h"

@interface PSMenu_TableViewController ()

@end

@implementation PSMenu_TableViewController
@synthesize PSMenuImage = _PSMenuImage;
@synthesize PSMenuText = _PSMenuText;


- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.PSMenuText = [[NSArray alloc]
                  initWithObjects:@"Weather",
                  @"Intelligence",
                  @"Fuels Status",
                  nil];

    self.PSMenuImage = [[NSArray alloc]
                  initWithObjects:@"RMACC_114x114.png",
                  @"RMACC_114x114.png",
                  @"RMACC_114x114.png",
                  nil];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (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 [_PSMenuText count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"rootTableCell";

    PSTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == 0) {
        cell = [[PSTableViewCell alloc]
                initWithStyle:UITableViewCellStyleDefault
                reuseIdentifier:CellIdentifier];
    }

    // Configure the cell...
    cell.rootLabel.text = [self.PSMenuText
                           objectAtIndex: [indexPath row]];

    UIImage *rootPhoto = [UIImage imageNamed:
                          [self.PSMenuImage objectAtIndex: [indexPath row]]];

    cell.rootImage.image = rootPhoto;

    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // Use indexPath to retrieve info that needs to be passed along to next view controller
    [self performSegueWithIdentifier:@"getWeather" sender:self];
}


@end

我想要的一个.m文件:

#import "WXMenu_TableViewController.h"
#import "DWO_TableViewController.h"


@interface WXMenu_TableViewController ()

@end

@implementation WXMenu_TableViewController
{
//Define array for weather products list
    NSArray *allwx;

}

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    //Define the weather products list
    allwx = [NSArray arrayWithObjects:@"Daily Weather", @"Fire Potential", @"Multi-Media Briefing", @"Sig. Fire Potential",@"Seasonal Outlook", @"Fire Season Broadcast", nil];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Set table size to one section.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    //When Weather is clicked on previous VC, the allwx list is displayed
    if ([_weathertable isEqualToString:@"Weather"]) {
        return [allwx count];
    }
    return 0;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *pstableID = @"MainCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:pstableID];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:pstableID];
    }

    if ([_weathertable isEqualToString:@"Weather"]) {
        cell.textLabel.text = [allwx objectAtIndex:indexPath.row];
    }

    return cell;
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
    if ([segue.identifier isEqualToString:@"showDWODetail"]) {
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        DWO_TableViewController *destViewController = segue.destinationViewController;
        destViewController.dailywxtable = [allwx objectAtIndex:indexPath.row];
        destViewController.title = destViewController.dailywxtable;
    }
}

@end

2 个答案:

答案 0 :(得分:1)

您可以在此处转换为单个UITableViewController,并根据所选类别显示相应的内容。这可能会对你有所帮助。

在目标视图控制器中,您可以声明变量并在prepareForSegue方法中使用它,如图所示,以确定您希望在目标视图控制器上看到的内容类型。

destController.varName = @"setYourTypeHere";

现在,您还可以根据您在tableview中单击的行设置变量值。

在目标视图控制器中,您可以使用switchif...else个案例检查此值,并根据您的要求绑定相应的数据。

答案 1 :(得分:0)

在故事板中,您将每个目的地连接到原型tableview单元格,但连接到视图控制器本身(故事板中视图控制器标题栏左侧的黄色小框)。

为每个segue命名一个有意义的名字,然后在你的" didSelect"委托方法,您可以使用:

执行segue
[self performSegueWithIdentifier:@"myNamedSegue" sender:self];