2

您好我正在尝试基于两个不同的数组重新加载我的表格视图。应该加载哪个数组由导航栏中的段控件确定。目前它只会加载第一个数组,按下段控件时不会发生任何事情。以下是我的代码,非常感谢任何关于为什么这不起作用的帮助。我还检查了我的 IBAction 分段器是否连接在笔尖中。

消息视图控制器.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

消息视图控制器.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

不知道为什么它最终没有工作,我所做的只是删除了三个类并用上面的代码重做所有事情,这一定是在路上有些无聊,但它现在可以工作了,我是一个快乐的露营者。也不需要委托的东西,因为这一切都在 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 回答