1

別のビューアからロードした配列を取得して、TableViewControllerではなくUITableViewに配置しようとしています。どうすればいいのかわかりません。今私はこのコードを持っています:

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

この同じサンプルコードを複数回投稿したので、統計を使用せずにこれを行う方法を説明します。はい。tableViewはコントローラーをデータソースとして使用するため、UITableViewではなくViewコントローラーにコレクション(配列)を設定する必要があります。

検索結果を表示するUITableViewがあるとします...そして、他のビューまたはそのようなアプリケーションデリゲートからこのViewControllerを起動します。

viewController(あなたはCRHCommentSection)で、テーブルに入力する配列のプロパティを定義します。

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

また、commentsController(これはあなたが持っているものよりも良い名前になります)に配列のセッターを追加します

-(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を含む新しいViewControllerをインスタンス化するときは、「配列」を設定します。私の場合は、searchResultsのコメントになります。

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

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

これは、ViewControllerをインスタンス化するときにテーブルビューの配列を伝達する簡単な方法です。

また、命名規則は物事を明確にするのに役立ちます

コメント用のViewControllerがある場合は、

CommentsViewController

また、コメントが含まれている配列は、読みやすくするためにコメントと呼ばれる必要があります。

乾杯。

データソースとデリゲート、cellForRowなどを設定するボイラープレートの残りの部分については、最後のラウンドでそのアドバイスを得たので、ここでは繰り返しません。

@bigkmは良い点がありました

@interface SearchResultsViewController : UIViewController<UITableViewDataSource, UITableViewDelegate>

ビューコントローラは、プロトコルを使用して上記のように適切に定義する必要があります。

于 2012-08-08T21:27:30.003 に答える
1

データソースを設定する必要があります

[self setDataSource:self];

また、プロトコルをインターフェイスに追加します。

<UITableViewDataSource>
于 2012-08-08T21:29:38.403 に答える