Привет Я пытаюсь перезагрузить мой табличный вид, основанный на двух разных массивах. Какой массив должен быть загружен, определяется элементом управления сегментами в панели навигации. В настоящее время он загружает только первый массив и ничего не происходит, когда нажата кнопка управления сегментом. Ниже мой код любая помощь, почему это не работает, очень ценится. Я также проверил, что мой сегмент IBAction подключен в наконечнике.iOS reload 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
Установите точку останова внутри 'segmenter'. Вы видите, что программа выполняет этот метод? Если да, вы видите разные значения для 'self.segmentControl.selectedSegmentIndex'? –
Почему вам нужен переключатель в 'segmenter', когда все они делают то же самое? А также вы можете вставить некоторые 'NSLog', чтобы посмотреть, что делает программа. – aforaudrey
Вот моя догадка - розетка настроена на элемент кнопки панели, а не сегментированный элемент управления, живущий внутри него. Проверьте навигатор документов, к какому объекту он подключен. – jrturton