1

2 レベルのテーブル ビューを作成しています。そして、2番目のビューには、viewDidLoadメソッドで以下にリストした映画のリストがあるはずですが、表示されていません.表示されていませんか?以下のコードは、第 1 レベルの画面で Disclosure Buttons インスタンスをヒットした後にこの情報を表示する DisclosureButtonController.m ファイルからのものです。

よろしく、

最初に表示される画面 私のviewDidLoadメソッドからリストされた映画を表示する画面

#import "LWWDisclosureButtonController.h"
#import "LWWAppDelegate.h"
#import "LWWDisclosureDetailController.h"

@interface LWWDisclosureButtonController ()
@property (strong, nonatomic) LWWDisclosureDetailController *childController;
@end

@implementation LWWDisclosureButtonController

@synthesize list;
@synthesize childController;

//- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
//{
//  self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
//if (self) {
    // Custom initialization
//}
//return self;
//}
- (void)viewDidLoad
{
[super viewDidLoad];
NSArray *array = [[NSArray alloc] initWithObjects:@"Toy Story", @"A Bug's Life", @"Toy     Story 2", @"Monsters, Inc.", @"Finding Nemo", @"The Incredibles", @"Cars", @"Ratatouille",    @"WALL-E", @"Up", @"Toy Story 3", @"Cars 2", @"Brave", nil];
 self.list = array;
// Do any additional setup after loading the view.
}

- (void)viewDidUnload
{
[super viewDidUnload];
self.list = nil;
self.childController = nil;
// Release any retained subviews of the main view.
}

#pragma mark -
#pragma mark Table Data Source Methods
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [list count];//
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:   (NSIndexPath *)indexPath
{
static NSString * DisclosureButtonCellIdentifier = @"DisclosureButtonCellIdentifier";

UITableViewCell *cell = [tableView   dequeueReusableCellWithIdentifier:DisclosureButtonCellIdentifier];

if (cell == nil)
{
    cell = [[UITableViewCell alloc]
            initWithStyle:UITableViewCellStyleDefault
            reuseIdentifier:DisclosureButtonCellIdentifier];
}
NSUInteger row = [indexPath row];
NSString *rowString = [list objectAtIndex:row];
cell.textLabel.text = rowString;
cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;
return cell;

}

#pragma mark -
#pragma mark Table Delegate Methods
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Hey, boss do you see the   disclosure button?" message:@"If you're trying to drill down, touch that instead mate!" delegate:nil cancelButtonTitle:@"Won't happen again" otherButtonTitles:nil];
[alert show];
}

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:   (NSIndexPath *)indexPath
{
if (childController == nil)
{
    childController = [[LWWDisclosureDetailController   alloc]initWithNibName:@"LWWDisclosureDetail" bundle:nil];
}
childController.title = @"Disclosure Button Pressed";
NSUInteger row = [indexPath row];
NSString *selectedMovie = [list objectAtIndex:row];
NSString *detailMessage = [[NSString alloc]initWithFormat:@"You pressed the disclosure  button for %@.", selectedMovie];
childController.message = detailMessage;
childController.title = selectedMovie;
[self.navigationController pushViewController:childController animated:YES];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

@終わり

4

2 に答える 2

0

電話:

[self.tableView reloadData]; (put in place of self.tableView the var or property connected to the tableView)

後に:

self.list = array;

viewDidLoad メソッドのコード行

そして置く

NSLog(@"number of rows: %d", [self.list count]);

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
  {
     return [list count];//
  }

ゼロでないかどうかを確認します。

于 2012-07-29T21:47:53.187 に答える
0

VC のロード後ではなく、VC を使用してアレイを開始しないのはなぜですか? init メソッドをオーバーライドしてみてください。

- (id) init {
    if((self == [super init])) {
        //load your array here and set
    }
    return self;
}

こうすることで、古いデバイスでは、ビューが読み込まれた後にアレイを表示するのを待つ必要がなくなります。しかし、しかし、これは私の好みです。私は init メソッドをオーバーライドして独自のメソッドを作成するのが大好きです。

また、SDK の奇妙な理由により、NSArray の代わりに NSMutableArray を使用する必要があります。そうしないと、動作しません。多分あなたは同じ問題を抱えていますか?

また、NSString *selectedMovie にも気付きました。「行」だけを使用する代わりに、getter indexPath.row を使用します。

これらの提案がお役に立てば幸いです。

于 2012-07-29T21:40:42.037 に答える