我正在尝试从另一个查看器中加载一个数组并将其放入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
答案 0 :(得分: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)
这是一种在实例化视图控制器时为表视图传递数组的简单方法。
此外,命名约定将帮助您清理
如果您有一个用于评论的视图控制器,那么它应该是
CommentsViewController
如果包含注释的数组应该被称为注释 - 为了便于阅读。
干杯。
至于设置数据源和委托以及cellForRow等的样板的其余部分, 你有最后的建议,所以我不会在这里重复。
@bigkm有一个好点
@interface SearchResultsViewController : UIViewController<UITableViewDataSource, UITableViewDelegate>
您的视图控制器必须按照上述协议正确定义。
答案 1 :(得分:1)
您需要设置数据源
[self setDataSource:self];
并将协议添加到您的界面。
<UITableViewDataSource>