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