我有一个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
答案 0 :(得分:1)
您可以在此处转换为单个UITableViewController
,并根据所选类别显示相应的内容。这可能会对你有所帮助。
在目标视图控制器中,您可以声明变量并在prepareForSegue
方法中使用它,如图所示,以确定您希望在目标视图控制器上看到的内容类型。
destController.varName = @"setYourTypeHere";
现在,您还可以根据您在tableview中单击的行设置变量值。
在目标视图控制器中,您可以使用switch
或if...else
个案例检查此值,并根据您的要求绑定相应的数据。
答案 1 :(得分:0)
在故事板中,您将每个目的地连接到原型tableview单元格,但连接到视图控制器本身(故事板中视图控制器标题栏左侧的黄色小框)。
为每个segue命名一个有意义的名字,然后在你的" didSelect"委托方法,您可以使用:
执行segue[self performSegueWithIdentifier:@"myNamedSegue" sender:self];