如何以编程方式显示UITableView?

时间:2021-09-27 19:44:55

I want to ask a question about the UITableView of the objective C. I am writing a program and I would like to create the UI programmatically. However, I don't know how to display the table programmatically. I already have a NSMutableArray to store the displayed data. And I create a object UITableView *tableData;, what should I do for the next step? Thank you very much.

我想问一个关于目标C的UITableView的问题。我正在编写一个程序,我想以编程方式创建UI。但是,我不知道如何以编程方式显示表。我已经有一个NSMutableArray来存储显示的数据。我创建了一个UITableView * tableData对象,我该怎么办呢?非常感谢你。

4 个解决方案

#1


38  

after writing above code you have to implement delegate method of UITableView.

在编写上面的代码之后,你必须实现UITableView的委托方法。

these are delegate method of UITableView load

这些是UITableView加载的委托方法

- (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;

}

#2


43  

Something like this should do the trick (assuming this is running from within your view controller and you have a property set up for the table view):

像这样的东西应该做的伎俩(假设这是从你的视图控制器中运行,你有一个属性为表视图设置):

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

[self.view addSubview:tableView];

Where you replace CGRectMake(...) with whatever position / size you'd like.

在哪里用你想要的任何位置/大小替换CGRectMake(...)。

#3


21  

  • Create a new class that inherits from UIViewController.
  • 创建一个继承自UIViewController的新类。
  • Make it conform to the UITableViewDataSource protocol.
  • 使其符合UITableViewDataSource协议。
  • Declare your table view.
  • 声明您的表视图。

Your header file should be like the following:

您的头文件应如下所示:

@interface MyViewController : UIViewController <UITableViewDataSource> {    

}

@property (nonatomic, retain) UITableView *tableView;

@end

In the viewLoad method of your class:

在您的类的viewLoad方法中:

  • Create a table view using initWithFrame. Use dimensions 320x460 for full height. Remove 44 from height if you have a navigation bar and 49 if you have a tab bar.
  • 使用initWithFrame创建表视图。全尺寸使用尺寸320x460。如果您有导航栏,请从高处移除44;如果您有标签栏,则移除49。
  • Create a new view.
  • 创建一个新视图。
  • Add the table view to the new view.
  • 将表视图添加到新视图。
  • Set the controller view to the new view.
  • 将控制器视图设置为新视图。
  • Set the table view data source to your instance (self).
  • 将表视图数据源设置为您的实例(self)。
  • Implement the two required data source methods: tableView:cellForRowAtIndexPath and tableView:numberOfRowsInSection
  • 实现两个必需的数据源方法:tableView:cellForRowAtIndexPath和tableView:numberOfRowsInSection

Your implementation file should be like the following:

您的实现文件应如下所示:

#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

#4


2  

Maybe its also helpful for you all who new in there.

也许它对你们所有新人都有帮助。

- (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

#1


38  

after writing above code you have to implement delegate method of UITableView.

在编写上面的代码之后,你必须实现UITableView的委托方法。

these are delegate method of UITableView load

这些是UITableView加载的委托方法

- (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;

}

#2


43  

Something like this should do the trick (assuming this is running from within your view controller and you have a property set up for the table view):

像这样的东西应该做的伎俩(假设这是从你的视图控制器中运行,你有一个属性为表视图设置):

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

[self.view addSubview:tableView];

Where you replace CGRectMake(...) with whatever position / size you'd like.

在哪里用你想要的任何位置/大小替换CGRectMake(...)。

#3


21  

  • Create a new class that inherits from UIViewController.
  • 创建一个继承自UIViewController的新类。
  • Make it conform to the UITableViewDataSource protocol.
  • 使其符合UITableViewDataSource协议。
  • Declare your table view.
  • 声明您的表视图。

Your header file should be like the following:

您的头文件应如下所示:

@interface MyViewController : UIViewController <UITableViewDataSource> {    

}

@property (nonatomic, retain) UITableView *tableView;

@end

In the viewLoad method of your class:

在您的类的viewLoad方法中:

  • Create a table view using initWithFrame. Use dimensions 320x460 for full height. Remove 44 from height if you have a navigation bar and 49 if you have a tab bar.
  • 使用initWithFrame创建表视图。全尺寸使用尺寸320x460。如果您有导航栏,请从高处移除44;如果您有标签栏,则移除49。
  • Create a new view.
  • 创建一个新视图。
  • Add the table view to the new view.
  • 将表视图添加到新视图。
  • Set the controller view to the new view.
  • 将控制器视图设置为新视图。
  • Set the table view data source to your instance (self).
  • 将表视图数据源设置为您的实例(self)。
  • Implement the two required data source methods: tableView:cellForRowAtIndexPath and tableView:numberOfRowsInSection
  • 实现两个必需的数据源方法:tableView:cellForRowAtIndexPath和tableView:numberOfRowsInSection

Your implementation file should be like the following:

您的实现文件应如下所示:

#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

#4


2  

Maybe its also helpful for you all who new in there.

也许它对你们所有新人都有帮助。

- (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