2012-08-10 56 views
2

嗨我想重新加载我的表视图基于两个不同的数组。应该加载哪个数组由导航栏中的段控制决定。目前它只会加载第一个数组,当按下段控件时什么都不会发生。下面是我的代码任何帮助,为什么这是行不通的,非常感谢。我也检查过我的IBAction分段器连接在笔尖上。iOS重新加载UITableView使用UISegmentedControl

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 
+2

在'segmenter'内设置断点。你看到程序执行该方法吗?如果是这样,你看到'self.segmentControl.selectedSegmentIndex'的不同值吗? – 2012-08-10 17:43:43

+1

为什么当他们都在做同样的事情时,你需要'segmenter'中的开关?你也可以扔一些'NSLog'来看看程序在做什么。 – aforaudrey 2012-08-10 17:48:21

+0

这是我的猜测 - 出口设置为酒吧按钮项目,而不是生活在其中的分段控制。在文档导航器中检查它实际连接到的对象。 – jrturton 2012-08-10 17:50:37

回答

1

不知道为什么它不到底我所做的只是删除三类和重做上面的东西代码凡事要有刚刚一路上borked工作,但它的工作,现在和我一个快乐的露营者。不需要委托的东西,因为这一切都在笔尖上完成,所以我原来的代码工作正常。

0

我看到的唯一问题是,你使用的是与在它的表视图中的视图控制器,但你没有在你的viewDidLoad中为它设置代理,而且你没有为你的视图控制器实现委托。

@interface MessageViewController() <UITableViewDelegate, UITableViewDataSource> 

@end 

viewDidLoad

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

另外,还要确保你所拥有的一切在IB正确挂接,您的分段控制,你的表视图两种。

编辑:我做我自己的测试按照你想要做什么,Here's my own implementation file

+0

谢谢你的回答我更新了我的代码上面,但它仍然不工作 – GFlam 2012-08-10 18:02:27

+0

好吧,另一个建议,这是通常的良好做法。不要直接调用你的ivars(tableView.method),而是使用你定义的self.tableView.method的访问器方法。同时扩展UITableViewDataSource并进行设置。 – 8vius 2012-08-10 18:19:10

+0

好吧,我做了我自己的测试,并使其工作。当您为分段控件设置IBAction时,请确保它位于Value Changed事件中。 – 8vius 2012-08-10 19:04:40

0

设置委托和数据源的方法,并采取断点来检查数据。你的代码是正确的。

tableview.delegate=self; 
tableView.datasource=self; 
+0

我通过将表视图连接到文件所有者而在笔尖执行了此操作,但是我只是将其添加到了我的viewdidload中,但仍然没有工作 – GFlam 2012-08-10 18:04:17

+0

if(segmentControl。selectedSegmentIndex == 0){ cell.textLabel.text = [inbox objectatIndex:IndexPath.row];尝试一下... – Bajaj 2012-08-10 18:12:10