gpt4 book ai didi

objective-c - 具有多个 TableView 的选项卡式 ios 应用程序

转载 作者:行者123 更新时间:2023-11-29 11:11:51 27 4
gpt4 key购买 nike

我正在使用 XCode 4.2 并在 iPad 5.0 上测试我的构建。

我开始使用 XCode 中的标准选项卡式应用程序构建应用程序,然后添加代码以在第一个选项卡中包含 2 个 uitableviews。

它编译,但表数据没有加载到 View 中。

应用委托(delegate).h:

@interface dmbAppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate>

@property (strong, nonatomic) UIWindow *window;

@property (strong, nonatomic) UITabBarController *tabBarController;

@end

AppDelegate.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
UIViewController *viewController1 = [[[dmbFirstViewController alloc] initWithNibName:@"dmbFirstViewController" bundle:nil] autorelease];
UIViewController *viewController2 = [[[dmbSecondViewController alloc] initWithNibName:@"dmbSecondViewController" bundle:nil] autorelease];
self.tabBarController = [[[UITabBarController alloc] init] autorelease];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, nil];
NSLog(@"Loading first tab view from app delegate...");
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
return YES;
}

FirstViewController.h:

@interface dmbFirstViewController : UIViewController {

ReservationsTable *reservationsController;
WaitlistTable *waitlistController;
IBOutlet UITableView *reserveTable;
IBOutlet UITableView *waitlistTable;
}

FirstViewController.m:

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

NSLog(@"FirstView Controller - View Loading Started");

[reserveTable setDataSource:reservationsController];
[waitlistTable setDataSource:waitlistController];

NSLog(@"FirstView Controller - Loading Table Views..");

[reserveTable setDelegate:reservationsController];
[waitlistTable setDelegate:waitlistController];
reservationsController.view = reservationsController.tableView;
waitlistController.view = waitlistController.tableView;

NSLog(@"FirstView Controller - View Loading Finished");
}

这两个表都有一个 .h 和 .m,并实现了标准表方法。我还在第一个 View nib 文件中添加了 2 个表并将它们链接到文件所有者。

更新:ReserveTable.h:

    @interface WaitlistTable : UITableViewController <UITableViewDataSource, UITableViewDelegate>{
NSMutableArray *waitlistitems;
}

ReserveTable.m:

- (void)viewDidLoad
{
NSLog(@"View Did Load - Wait List Table");
waitlistitems = [[NSMutableArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5",@"6",@"6",@"8",@"9",@"10",@"11",@"12",@"13",@"14",@"15",@"16",@"17",nil] retain];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
NSLog(@"Inside number of section for Wait List table...");
return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSLog(@"Inside numberofRows for Wait List table...");
// Return the number of rows in the section.
return [waitlistitems count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"Inside cell for row at index path for Wait List table...");
static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}

// Configure the cell...
cell.textLabel.text = [NSString stringWithFormat:@"1.%@" ,[waitlistitems objectAtIndex:indexPath.row]];
return cell;
}

想法?

最佳答案

将您的 viewDidLoad 更改为:

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

reservationsController = [[ReservationsTable alloc] init];
waitlistController = [[WaitlistTable alloc] init];

NSLog(@"FirstView Controller - View Loading Started");

[reserveTable setDataSource:reservationsController];
[waitlistTable setDataSource:waitlistController];

NSLog(@"FirstView Controller - Loading Table Views..");

[reserveTable setDelegate:reservationsController];
[waitlistTable setDelegate:waitlistController];

NSLog(@"FirstView Controller - View Loading Finished");
}

基本上,您永远不会初始化您的 tableViewControllers(我猜这是它们的名称,我会将它们的名称更改为“WaitlistTableViewController”和“ReservationsTableViewController”之类的名称,但那只是我。)另外,将“tableView”设置为“view”是不必要的。

或者更好的是,在 dmbFirstViewController 的 init 方法中初始化它们。

或者像这样使用dmbFirstViewController:

dmbFirstViewController.h:

@interface dmbFirstViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> {

ReservationsTable *reservationsController;
WaitlistTable *waitlistController;
IBOutlet UITableView *reserveTable;
IBOutlet UITableView *waitlistTable;
NSMutableArray *waitlistitems;
NSMutableArray *reserveitems;
}

dmbFirstViewController.m:

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


waitlistitems = [[NSMutableArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5",@"6",@"6",@"8",@"9",@"10",@"11",@"12",@"13",@"14",@"15",@"16",@"17",nil] retain];

NSLog(@"FirstView Controller - View Loading Started");

[reserveTable setDataSource:self];
[waitlistTable setDataSource:self];

NSLog(@"FirstView Controller - Loading Table Views..");

[reserveTable setDelegate:self];
[waitlistTable setDelegate:self];

NSLog(@"FirstView Controller - View Loading Finished");
}

- (void)viewDidAppear:(BOOL)animated
{
[reserveTable reloadData];
[waitlistTable reloadData];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
NSLog(@"Inside number of section for Wait List table...");
if(tableView == waitlistTable)
{
//Return sections for waitlistTable
return 1;
}else{
//Return sections for reservedTable
return 1;
}
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if(tableView==waitlistTable)
{
NSLog(@"Inside numberofRows for Wait List table...");
// Return the number of rows in waitlistTable section.
return [waitlistitems count];
}else{
// Return the number of rows in reservedTable section.
return [reserveditems count];
}
}

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

if(tableView == waitlistTable)
{
NSLog(@"Inside cell for row at index path for Wait List table...");
static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}

// Configure the cell...
cell.textLabel.text = [NSString stringWithFormat:@"1.%@" ,[waitlistitems objectAtIndex:indexPath.row]];
return cell;
} else {
//Create cell for reservedTable Cell
.....
return cell;
}
}

您必须完成关于 reservedTable 单元格的部分,我没有那个代码。另外,我猜测 reservedTable 的项目数组并没有初始化它。

关于objective-c - 具有多个 TableView 的选项卡式 ios 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11195921/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com