以编程方式创建UITableViewController

时间:2010-12-05 00:34:49

标签: iphone objective-c

这就是我尝试过的。屏幕上没有任何内容,并且没有任何您应该实现的UITableView方法被调用。

-(void)loadView 
{
    UIView *view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 
    self.view = view;
    [view release];
}


- (void)viewDidLoad 
{
    [super viewDidLoad];
    UITableViewController *TVC = [[[UITableViewController alloc] 
    initWithStyle:UITableViewStylePlain] autorelease];
    CGRect cgRct = CGRectMake(0, 10, 320, 100);
    UIView *newView = [[UIView alloc] initWithFrame:cgRct];
    TVC.view = newView;
    [newView release];
    [self.view addSubview:TVC.view];
}

我已经找到了以编程方式执行此操作的好示例和教程,但没有。

我想要实现的是一个表格,它会占用我的屏幕。也许3/4的屏幕会很好。

非常感谢 代码

4 个答案:

答案 0 :(得分:8)

问题是你正在创建一个UITableViewController,它是一个UIViewController,并且期望在导航堆栈上。你想要做的是创建一个UITableView,这是一个UIView。您也没有设置表的委托和数据源,您需要这样做以获得回溯。

你的viewDidLoad看起来应该是这样的

- (void)viewDidLoad 
{
    [super viewDidLoad];
    UITableView *table = [[[UITableView alloc] initWithStyle:UITableViewStylePlain] autorelease];
    table.dataSource = self;
    table.delegate = self;
    table.frame = CGRectMake(0, 10, 320, 100);
    [self.view addSubview:table];
}

(注意,如果您需要访问回调之外的表,则应将其保存在ivar中而不是在本地声明,并保留它。如果您需要更多行,请告诉我。代码,告诉你我的意思)

答案 1 :(得分:1)

确保使用

设置TVC的委托
TVC.delegate = self;

这就是为什么没有这些方法被调用的原因。另外,通过将接口声明更改为

,确保您的类实现UITableViewDelegate协议
@interface YourViewController : UIViewController <UITableViewDelegate> {
    //declare variables here
}

同样重要的是,不要设置TVC.view,因为初始化视图控制器时已经发生这种情况。您只是将其设置为空白视图,这就是您没有看到任何内容的原因。

答案 2 :(得分:1)

iOS7似乎喜欢这种初始化tableview的方式:

//make tableview
UITableView *table = [[UITableView alloc] initWithFrame:CGRectMake(0, 81, 200, 200) style:UITableViewStylePlain];
table.dataSource = self;
table.delegate = self;
[self.dataView addSubview:table];

尝试一下。希望它可以帮到某人。

答案 3 :(得分:0)

UIView *newView = [[UIView alloc] initWithFrame:cgRct];
TVC.view = newView;

我会给你一个提示。在这里,您将UITableViewController的视图设置为EMPTY VIEW ...