2010-12-05 2 views
1

Это то, что я пробовал. Ничего не появляется на экране, и ни один из методов UITableView, которые вы должны реализовать, вызывается.Создание UITableViewController программно

-(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 моего экрана будет хорошо.

Большое спасибо Код

ответ

8

Проблема в том, что вы создаете UITableViewController, который является UIViewController, и будет ожидать, что он находится в стеке nav. Вы хотите создать 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]; 
} 

(Обратите внимание, что если вы собираетесь иметь доступ к таблице за пределами обратных вызовов, вы должны сохранить его в Ивар, а не объявляя его локально, и должны сохранить его Дайте мне знать, если вам нужно еще несколько строк кода, чтобы показать вам, что я имею в виду)

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

Я дам вам подсказку. Здесь вы настраиваете вид UITableViewController к пустому VIEW ...

1

Убедитесь, что вы установили делегат TVC с

TVC.delegate = self; 

Вот причина, почему ни один из этих методов не вызывался. Кроме того, убедитесь, что ваш класс реализует протокол UITableViewDelegate, изменив объявление интерфейса для

@interface YourViewController : UIViewController <UITableViewDelegate> { 
    //declare variables here 
} 

Кроме того, не менее важно, не устанавливайте TVC.view, так как это уже происходит при инициализации контроллера представления. Вы просто устанавливаете его на пустой экран, поэтому вы ничего не видите.

1

iOS7, кажется, нравится этот способ init'ing в 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]; 

попробуйте это. Надеюсь, это поможет кому-то.