在上周的洞中,我使用了tableviews。对于像我这样的初学者来说,这是非常困难的事情。我能解决的大多数问题都是我自己解决的。但仍有一件事我没有修复。我的问题:如何让我实现一个工作的tableview作为ViewController中一个实例的子视图? 我发布了我用过的代码。 Table类很好,如果我直接在ViewController中设置它没有问题。但是,如果我想在ViewController中设置为子视图,我可以看到它显示,我可以滚动它,但下拉部分什么都不做。我知道我必须与代表做一些事情,但我不知道到底是什么。
有我的代码:
Table.h
#import <UIKit/UIKit.h>
@interface Table : UITableViewController{
UITableView *table;
NSString *dataForSection0;
NSString *dataForSection2;
NSMutableArray *demoData;
int selectedValueIndex;
bool isShowingList;
}
@property (retain, nonatomic) NSString *dataForSection0;
@property (retain, nonatomic) NSString *dataForSection2;
@property (retain, nonatomic) NSMutableArray *demoData;
@property (nonatomic) int selectedValueIndex;
@property (nonatomic) bool isShowingList;
@end
Table.m
#import "Table.h"
@interface Table ()
@end
@implementation Table
@synthesize dataForSection0;
@synthesize dataForSection2;
@synthesize demoData;
@synthesize selectedValueIndex;
@synthesize isShowingList;
- (void)viewDidLoad
{
[super viewDidLoad];
dataForSection0 = @"This is some cell content.";
dataForSection2 = @"This is another cell content.";
demoData = [[NSMutableArray alloc] init];
[demoData addObject:@"One"];
[demoData addObject:@"Two"];
[demoData addObject:@"Three"];
[demoData addObject:@"Four"];
[demoData addObject:@"Five"];
isShowingList = NO;
selectedValueIndex = 0;
}
- (void)viewDidUnload
{
[self setDataForSection0:nil];
[self setDataForSection2:nil];
[self setDemoData:nil];
[super viewDidUnload];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 3;
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
if (section == 0) {
return @"My first section";
}
else if (section == 1){
return @"My demo section";
}
else{
return @"Another section";
}
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 60.0;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
if (section == 0 || section == 2) {
return 1;
}
else{
if (!isShowingList) {
return 1;
}
else{
return [demoData count];
}
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
cell.selectionStyle = UITableViewCellSelectionStyleBlue;
cell.accessoryType = UITableViewCellAccessoryNone;
[[cell textLabel] setFont:[UIFont fontWithName:@"Marker Felt" size:16.0]];
if ([indexPath section] == 0) {
[[cell textLabel] setText:dataForSection0];
}
else if ([indexPath section] == 2){
[[cell textLabel] setText:dataForSection2];
}
else{
if (!isShowingList) {
[[cell textLabel] setText:[demoData objectAtIndex:selectedValueIndex]];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
else{
[[cell textLabel] setText:[demoData objectAtIndex:[indexPath row]]];
if ([indexPath row] == selectedValueIndex) {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else{
cell.accessoryType = UITableViewCellAccessoryNone;
}
}
}
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
if ([indexPath section] == 1) {
if (isShowingList) {
selectedValueIndex = [indexPath row];
}
isShowingList = !isShowingList;
[table reloadSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationFade];
}
else{
return;
}
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
} else {
return YES;
}
}
@end
ViewController.h
#import <UIKit/UIKit.h>
#import "Table.h"
@interface ViewController : UIViewController {
Table *table;
}
@end
ViewController.m
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
table = [[Table alloc] initWithStyle:UITableViewStyleGrouped];
CGRect viewFrame = self.view.frame;
viewFrame = CGRectMake(50, 50, 300, 800);
table.view.frame = viewFrame;
[self.view addSubview:table.view];
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return YES;
}
@end
答案 0 :(得分:0)
在将Tables视图添加为子视图之前,请尝试调用loadView函数。
table = [[Table alloc] initWithStyle:UITableViewStyleGrouped];
CGRect viewFrame = self.view.frame;
viewFrame = CGRectMake(50, 50, 300, 800);
table.view.frame = viewFrame;
[table loadView];
[self.view addSubview:table.view];