0

提前致谢。

目前正在开发一个大学应用程序,该应用程序由一个包含两个视图控制器的选项卡栏控制器组成,第一个是无关紧要的,第二个是导航控制器。该导航控制器由一个 tableView 组成,其中包含用户可以选择的各种校园建筑(来自 NSArray)。导航控制器还包含另一个名为 BuildingFloorsViewController 的视图控制器,它本身有另一个表,其中包含所选建筑物的 NSArray 中的各个楼层,称为楼层(一楼、一楼等)。

所以想法是相同的 NSArray(楼层)将根据选择的建筑物重新填充。这是一个坏主意吗?

目前发生的情况是表格采用了前一个表格中的哪一行被选择的形式——这非常有意义,因为表格是在那里启动的。因此,例如,如果我首先选择 London Road 行,它将创建具有 4 个值(+ nil)的数组,但如果我首先选择 Faraday Ring 行,它将创建具有 3 个值(+ nil)的数组。

那么,如何为每个 if 语句条件提供一组不同的值呢?我已经研究过使用可变数组并只是调整值但是还有另一种方法吗?谢谢。

这是 BuildingFloorsViewController.h 的代码

#import <UIKit/UIKit.h>

@interface BuildingFloorsViewController : UITableViewController{
    NSArray *floors;
    NSArray *londonRoadFloors;
}
@property (nonatomic, retain) NSArray *floors;
@property (nonatomic, retain) NSArray *londonRoadFloors;

@end

和 BuildingFloorsViewController.m

#import "BuildingFloorsViewController.h"

@interface BuildingFloorsViewController ()

@end

@implementation BuildingFloorsViewController
@synthesize floors;
@synthesize londonRoadFloors;

-(void)viewWillAppear:(BOOL)animated {
if([self.title isEqualToString:@"Farady Wing"]){
    floors =[[NSArray alloc]
            initWithObjects:@"First Floor",@"Second Floor",@"Third Floor",nil];
}else if([self.title isEqualToString:@"London Road"]){
    floors =[[NSArray alloc]
            initWithObjects:@"Ground Floor",@"First Floor",@"Second Floor",@"Third Floor",nil];
    }
}


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

    if (self) {
    // Custom initialization
    }
    return self;
}

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

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
- (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 [floors count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}

cell.textLabel.text=[self.floors objectAtIndex:[indexPath row]]; 
return cell;
}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
//<#RoomViewController#> *roomViewController = [[<#RoomViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil];

} @结尾

4

1 回答 1

0

解决!我在某处省略了 [self.tableView reloadData]。我花了一段时间才弄清楚——我不得不回去逐行分析它。

应该是这样的。

-(void)viewWillAppear:(BOOL)animated {
if([self.title isEqualToString:@"Farady Wing"]){
    floors =[[NSArray alloc]
            initWithObjects:@"First Floor",@"Second Floor",@"Third Floor",nil];
}else if([self.title isEqualToString:@"London Road"]){
    floors =[[NSArray alloc]
            initWithObjects:@"Ground Floor",@"First Floor",@"Second Floor",@"Third Floor",nil];
    }
[super viewWillAppear:animated];
[self.tableView reloadData];
}

非常感谢社区,感谢您看到这个问题,我希望这对其他人有所帮助。

于 2012-04-15T14:48:05.367 回答