Как отобразить UITableView программно? - PullRequest
22 голосов
/ 26 июля 2010

Я хочу задать вопрос о UITableView объекта C. Я пишу программу и хочу создать программный интерфейс.Однако я не знаю, как отображать таблицу программно.У меня уже есть NSMutableArray для хранения отображаемых данных.И я создаю объект UITableView *tableData;, что мне делать для следующего шага?Большое спасибо.

Ответы [ 4 ]

43 голосов
/ 26 июля 2010

Что-то вроде этого должно сработать (при условии, что это выполняется из вашего контроллера представления и у вас настроено свойство для представления таблицы):

tableView = [[[UITableView alloc] initWithFrame:CGRectMake(...) style:UITableViewStylePlain] autorelease];
tableView.dataSource = self;
tableView.delegate = self;

[self.view addSubview:tableView];

Где вы заменяете CGRectMake(...) на что угоднопозиция / размер, который вы хотите.

38 голосов
/ 26 июля 2010

после написания кода выше вы должны реализовать метод делегата UITableView.

это метод делегата UITableView load

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [your array 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] autorelease];

    }

    // Configure the cell...
    cell.textLabel.text = [yourarray objectAtIndex:indexPath.row];

    return cell;

}
21 голосов
/ 12 августа 2011
  • Создайте новый класс, который наследуется от UIViewController.
  • Привести его в соответствие с протоколом UITableViewDataSource.
  • Объявите ваш табличный вид.

Ваш заголовочный файл должен выглядеть следующим образом:

@interface MyViewController : UIViewController <UITableViewDataSource> {    

}

@property (nonatomic, retain) UITableView *tableView;

@end

В методе viewLoad вашего класса:

  • Создать табличное представление, используя initWithFrame. Используйте размеры 320x460 для полной высоты. Снимите 44 с высоты, если у вас есть панель навигации, и 49, если у вас есть панель вкладок.
  • Создать новый вид.
  • Добавить табличное представление в новое представление.
  • Установить вид контроллера на новый вид.
  • Установите для источника данных табличного представления свой экземпляр (self).
  • Реализация двух необходимых методов источника данных: tableView: cellForRowAtIndexPath и tableView: numberOfRowsInSection

Ваш файл реализации должен выглядеть следующим образом:

#import "MyViewController.h"

@implementation MyViewController

@synthesize tableView=_tableView;

- (void)dealloc
{
    [_tableView release];

    [super dealloc];
}

#pragma mark - View lifecycle

- (void)loadView
{
    UITableView *tableView = [[UITableView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 460.0) style:UITableViewStylePlain];
    self.tableView = tableView;
    [tableView release];    

    UIView *view = [[UIView alloc] init];
    [view addSubview:self.tableView];
    self.view = view;
    [view release];

    self.tableView.dataSource = self;
}

- (void)viewDidUnload {
    self.tableView = nil;

    [super viewDidUnload];
}

#pragma mark - Table view data source

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *MyCellIdentifier = @"MyCellIdentifier";

    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:MyCellIdentifier];

    if(cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyCellIdentifier] autorelease];
    }

    return cell;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
   return 5;
}

@end
1 голос
/ 09 октября 2014

Может быть, это также полезно для всех, кто там новенький.

- (void)viewDidLoad
{
    [super viewDidLoad];
    // init table view
    tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];

    //or, you may do that 
    //tableView = [[UITableView alloc] init];
    //tableView.frame = CGRectMake:(5 , 5 , 320 , 300);

    // must set delegate & dataSource, otherwise the the table will be empty and not responsive
    tableView.delegate = self;
    tableView.dataSource = self;

    tableView.backgroundColor = [UIColor cyanColor];

    // add to canvas
    [self.view addSubview:tableView];
}

#pragma mark - UITableViewDataSource
// number of section(s), now I assume there is only 1 section
- (NSInteger)numberOfSectionsInTableView:(UITableView *)theTableView
{
    return 1;
}

// number of row in the section, I assume there is only 1 row
- (NSInteger)tableView:(UITableView *)theTableView numberOfRowsInSection:(NSInteger)section
{
    return 1;
}

// the cell will be returned to the tableView
- (UITableViewCell *)tableView:(UITableView *)theTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"HistoryCell";

    // Similar to UITableViewCell, but 
    JSCustomCell *cell = (JSCustomCell *)[theTableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (cell == nil) {
        cell = [[JSCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    }
    // Just want to test, so I hardcode the data
    cell.descriptionLabel.text = @"Testing";

    return cell;
}

@end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...