1

我正在尝试获取从另一个查看器加载的数组并将其放入 UITableView,而不是 TableViewController。我不知道我会怎么做。现在我有这个代码:

CRHCommentSection.m

#import "CRHCommentSection.h"
#import "CRHViewControllerScript.h"

@interface CRHCommentSection ()

@end

@implementation CRHCommentSection
@synthesize observationTable;

NSArray *myArray; 


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
 {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
    // Custom initialization
}
return self;
}


- (void)viewDidLoad
    {


    myArray = [CRHViewControllerScript theArray];
    NSLog(@"%@", myArray);
    //NSArray* paths = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:0   inSection:1]];
    //[observationTable insertRowsAtIndexPaths:paths   withRowAnimation:UITableViewRowAnimationTop];


    [super viewDidLoad];
    // Do any additional setup after loading the view.

}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    // Return the number of sections.

    NSLog(@" in method 1");
    return 1;
}


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

    NSLog(@" in method 2");
   // Return the number of rows in the section.
   return [myArray count];


   }

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath    *)indexPath {

    NSLog(@" in method 3");

    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault   reuseIdentifier:CellIdentifier];
    }

    cell.textLabel.text = [myArray objectAtIndex:indexPath.row];    
    return cell;
}

CRHCommentSection.h

    #import <UIKit/UIKit.h>


@interface CRHCommentSection : UIViewController

@property (weak, nonatomic) IBOutlet UITableView *observationTable;



@end
4

2 回答 2

2

由于您已多次发布相同的示例代码,因此我将为您提供不使用静态的方法。是的,您确实需要在视图控制器而不是 UITableView 上设置集合(数组),因为 tableView 使用控制器作为数据源。

假设您有一个显示搜索结果的 UITableView ...并且您从其他视图或从应用程序委托启动此视图控制器,就像这样..

在您的 viewController(您的是 CRHCommentSection)中,为您要用来填充表格的数组定义一个属性。

@property (nonatomic,retain, setter=setSearchResults:) NSArray *searchResults; //use your array name here
//BTW please dont call it ARRAY..its confusing.

同样在你的commentsController(这将是一个更好的名字,你所拥有的)添加数组的setter

-(void) setSearchResults:(NSArray *)searchResults
{
    //in case we loaded this view with results previously release the previous results
    if ( _searchResults )
    {
        [_searchResults release];
    }
    _searchResults = [searchResults retain]; 

   [_tableView reloadData];
}

当您在其中使用 UITableView 实例化新视图控制器时 - 设置“数组”,在您的情况下,在我的情况下进行评论 searchResults

_searchResultsViewController = [[SearchResultsViewController alloc] initWithNibName:@"SearchResultsViewController" bundle:nil];

//now set the array on the controller
_searchResultsViewController.searchResults = mySearchResults; //(your array)

这是在实例化视图控制器时为表视图传达数组的简单方法。

此外,命名约定将帮助您理清思路

如果你有一个用于评论的视图控制器,它应该是

评论视图控制器

如果数组包含注释,则应将其称为注释 - 以提高可读性。

干杯。

至于设置数据源和委托以及 cellForRow 等的其余样板文件,您在最后一次得到了建议,所以我不会在这里重复。

@bigkm 有一个好点子

@interface SearchResultsViewController : UIViewController<UITableViewDataSource, UITableViewDelegate>

您的视图控制器必须按照上面的协议正确定义。

于 2012-08-08T21:27:30.003 回答
1

您需要设置数据源

[self setDataSource:self];

并将协议添加到您的界面。

<UITableViewDataSource>
于 2012-08-08T21:29:38.403 回答