如何使用对象数组填充TableView?

时间:2013-10-22 21:56:15

标签: ios objective-c arrays uitableview

我有一个TableView控制器,我想用数组中的对象填充。我正在使用StoryBoard。另外,我不确定是否需要将标签放在故事板中的Cell Prototype中作为一种占位符?

我的aList Mutable Array包含Homework类型的对象。 在表的每一行中,我想显示(这些是已在我的家庭作业模型中设置的变量):

-ClassName

-AssignmentTitle

-DueDate

这是我目前拥有的

TableViewController.h

@interface AssignmentTableController : UITableViewController
<
AssignmentDelegate
>

@property(strong,nonatomic) Assignment *vc;
@property (strong, nonatomic) NSMutableArray *alist;//array was filled with delegation 


@end

TableViewController.m

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{

// Return the number of sections.
return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

// Return the number of rows in the section.
 return [self.alist count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier     forIndexPath:indexPath];
Homework *ai = [self.alist objectAtIndex:indexPath.row];

//*******I am not sure what to do from Here******
//*******I need to start displaying 1 object per row,displaying what was stated above***

  // Configure the cell...

return cell;
}

3 个答案:

答案 0 :(得分:7)

我有类似的实现。

实现: 我创建了以下方法。 (我编辑过它们以适合您提供的代码。)

-(Homework*) homeworkAtIndex: (NSInteger) index
{
    return [alist objectAtIndex:index] ;
}

-(NSInteger) numberOfObjectsInList
{
    return [alist count];
}

在UITableViewController委托方法中:

- (NSInteger) tableView: (UITableView*) tableView numberOfRowsInSection: (NSInteger) section

我使用了这种方法调用

return [self numberOfObjectsInList]; 

在委托方法中:

- (UITableViewCell*) tableView: (UITableView*) tableView cellForRowAtIndexPath: (NSIndexPath*) indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:SubtitleIdentifier] autorelease];
    Homework *ai = [self homeworkAtIndex: indexPath.row];

    /* your other cell configurations
    cell.textLabel.text = ai.className; // eg. display name of text
    cell.detailTextLabel.text = [NSString stringWithFormat:@"%@ | %@",ai.assignmentTitle,ai.dueDate]; // will show the cell with a detail text of "assignment title | due date" eg. "Lab 1 | 23 Oct 2013" appearing under the className called "Physics"
    */
}

使用homeworkAtIndex方法,您可以将数组中的不同对象填充到表格中的不同单元格中。

这种方式让我必须创建自定义单元格并格式化单元格大小以适应表格。如果要显示的数据不那么长,并且实际上不必使用自定义单元格,这可能对您有用。 (很像我提供的例子)

如果您想知道如何检查所选的不同单元格(因为您可能希望将其推送到其他viewController),您可以在委托方法中执行此操作:

- (void) tableView: (UITableView*) tableView didSelectRowAtIndexPath: (NSIndexPath*) indexPath
{
    UIViewController* nextViewController = nil;
    NSString* cellDisplayName = [delegate homeworkAtIndex: indexPath.row].name; // can be the Homework object if you want
    if( [cellDisplayName isEqualToString:[self homeworkAtIndex:0].className] )
        nextViewController = [[firstViewController alloc] init];
    else if( [cellDisplayName isEqualToString:[self homeworkAtIndex:1].className] )
        nextViewController = [[secondViewController alloc] init];
    // goes on for the check depending on the number of items in the array
}

我在这里使用NSString来检查className,因为我不确定Homework对象是什么,但你肯定可以改变逻辑以适应Homework对象,因为我的猜测是你可能有不同的对象有相同的className变量。

希望这有帮助! :)

答案 1 :(得分:3)

有很多教程使用数组填充tableviews。看看这些教程。

http://www.appcoda.com/ios-programming-tutorial-create-a-simple-table-view-app/

http://www.raywenderlich.com/1797/ios-tutorial-how-to-create-a-simple-iphone-app-part-1

您需要实现自定义单元格以容纳3个标签。默认表格单元格通常有1个图像视图和2个标签..

答案 2 :(得分:0)

使用自定义单元格

http://www.appcoda.com/customize-table-view-cells-for-uitableview/

使用单元格作为视图,只需将标签放在单元格的内容视图中[1] 我看到你已经有了要显示的数据的对象,所以使用一个包含你要显示的内容的单元格