2

こんにちは私は2つの異なる配列に基づいてテーブルビューをリロードしようとしています。ロードする配列は、ナビゲーションバーのセグメントコントロールによって決まります。現在、最初の配列のみがロードされ、セグメントコントロールが押されても何も起こりません。以下は私のコードですこれが機能しない理由についての助けは大歓迎です。また、IBActionセグメンターがペン先に接続されていることも確認しました。

MessageViewController.h

#import <UIKit/UIKit.h>

@interface MessageViewController : UIViewController<UITableViewDelegate> {
    IBOutlet UISegmentedControl *segmentControl;
    IBOutlet UINavigationBar *navBar;
    IBOutlet UITableView *tableView;
}

@property (retain, nonatomic) IBOutlet UISegmentedControl *segmentControl;
@property (retain, nonatomic) IBOutlet UITableView *tableView;
@property (nonatomic, retain) NSMutableArray *inbox;
@property (nonatomic, retain) NSMutableArray *sent;

@end

MessageViewController.m

#import "MessageViewController.h"

@interface MessageViewController () <UITableViewDelegate>

@end

@implementation MessageViewController
@synthesize segmentControl;
@synthesize inbox;
@synthesize sent;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        self.tabBarItem.title = NSLocalizedString(@"Messages", @"Messages");
        self.tabBarItem.image = [UIImage imageNamed:@"mail_2_icon&32"];
    }
    return self;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    self.tableView.delegate = self;
    self.inbox = [NSMutableArray arrayWithObjects:@"testing", @"test", @"another", nil];
    self.sent = [NSMutableArray arrayWithObjects:@"test", @"another", @"testing", nil];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

#pragma mark Table view methods

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if(segmentControl.selectedSegmentIndex == 0){
        return [inbox count];
    }else if(segmentControl.selectedSegmentIndex == 1){
        return [sent count];
    }else{
        return [inbox count];
    }
}

- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }
    if(segmentControl.selectedSegmentIndex == 0){
        NSString *cellValue = [inbox objectAtIndex:indexPath.row];
        cell.textLabel.text = cellValue;
    }else if(segmentControl.selectedSegmentIndex == 1){
        NSString *cellValue = [sent objectAtIndex:indexPath.row];
        cell.textLabel.text = cellValue;
    }else{
        NSString *cellValue = [inbox objectAtIndex:indexPath.row];
        cell.textLabel.text = cellValue;
    }
    return cell;
}

-(IBAction)segmenter{
    [tableView reloadData];
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

}

- (void)dealloc {
    [inbox release];
    [sent release];
    [segmentControl release];
    [segmentControl release];
    [super dealloc];
}

- (void)viewDidUnload {
    [self setSegmentControl:nil];
    [segmentControl release];
    segmentControl = nil;
    [super viewDidUnload];
}

@end
4

3 に答える 3

1

最終的に機能しなかった理由はわかりませんが、3つのクラスを削除し、上記のコードですべてをやり直すだけで、途中で中断されたに違いありませんが、現在は機能しており、幸せなキャンピングカーです。それはすべてnibで行われるので、デリゲートのものも必要ありませんでした。そのため、元のコードは正常に機能しました。

于 2012-08-10T21:18:47.433 に答える
0

私が見る唯一の問題は、テーブルビューを含むビューコントローラを使用しているが、でそのデリゲートを設定してviewDidLoadおらず、ビューコントローラのデリゲートを実装していないことです。

@interface MessageViewController () <UITableViewDelegate, UITableViewDataSource>

@end

viewDidLoad

self.tableView.delegate = self;
self.tableView.dataSource = self;

また、セグメント化されたコントロールとテーブルビューの両方で、すべてがIBに正しく接続されていることを確認してください。

編集:私はあなたがやろうとしていることに従って私自身のテストをしました、これが私自身の実装ファイルです

于 2012-08-10T17:48:34.587 に答える
0

デリゲートメソッドとデータソースメソッドを設定し、ブレークポイントを取得してデータをチェックします。あなたのコードは正しいです。

tableview.delegate=self;
 tableView.datasource=self;
于 2012-08-10T18:00:52.863 に答える