来自一个来源的多个视图和UITable,如何填充它们?

时间:2014-04-04 03:52:23

标签: ios iphone xcode uitableview uiviewcontroller

好吧我有三个UITableViews,我需要来自同一个viewcontroller代码。我需要在.m的{​​{1}}文件中填充所有文件。

AG_ViewController.h

AG_ViewController

AG_ViewController.m

    #import <UIKit/UIKit.h>

    @interface AG_ViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>{

        IBOutlet UITableView *yesterdayTableView;
        IBOutlet UITableView *tomorrowTableView;
        IBOutlet UITableView *tableView;
        IBOutlet UILabel *todaysDate;
        IBOutlet UILabel *subtractDate;
        IBOutlet UILabel *addDate;
    }
    @end

我一次只设置一个表,那么如何让#import "AG_ViewController.h" #import "AG_Storage.h" #import "AG_AddItemViewController.h" @interface AG_ViewController () @property NSMutableArray *mainArray; @property NSMutableArray *yesterdayArray; @property NSMutableArray *tomorrowArray; @property NSDate *todayDate; @property NSDate *tomorrowsDate; @property NSDate *yesterdaysDate; @property int counter; @property(weak,nonatomic)IBOutlet UIButton *yesterdayButton; @property(weak,nonatomic)IBOutlet UIButton *tomorrowButton; @property(weak,nonatomic)IBOutlet UIButton *backButton; @end @implementation AG_ViewController - (void)viewDidLoad { [super viewDidLoad]; self.mainArray = [[NSMutableArray alloc] init]; self.yesterdayArray = [[NSMutableArray alloc]init]; self.tomorrowArray = [[NSMutableArray alloc]init]; [self loadInitialData]; } - (void)loadInitialData { // Do any additional setup after loading the view, typically from a nib. //NSDate Info NSTimeInterval secondsPerDay = 24 * 60 * 60; NSDate *today = [[NSDate alloc]init]; NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"MMMM dd, yyyy"]; self.todayDate = today; self.tomorrowsDate = [today dateByAddingTimeInterval: secondsPerDay]; self.yesterdaysDate = [today dateByAddingTimeInterval: -secondsPerDay]; NSString *todayString = [dateFormat stringFromDate:self.todayDate]; NSString *tomorrowString = [dateFormat stringFromDate:self.tomorrowsDate]; NSString *yesterdayString = [dateFormat stringFromDate:self.yesterdaysDate]; todaysDate.text = todayString; addDate.text = tomorrowString; subtractDate.text = yesterdayString; AG_Storage *theDateToday = [[AG_Storage alloc]init]; theDateToday.todaysDate = self.todayDate; //Populate mainArray for (int x= 0; x!=-99; x++) { //get ready to call the NSUserDefaults NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:[NSString stringWithFormat:@"%@%d",todayString,x]]; AG_Storage *someStorageObject = [NSKeyedUnarchiver unarchiveObjectWithData:data]; AG_Storage *storeToArray = [[AG_Storage alloc]init]; storeToArray.itemName = someStorageObject; if (someStorageObject != nil) { //add the data to the mainArray and update counter [self.mainArray addObject:storeToArray]; self.counter++; } else if ((someStorageObject == nil) && (x==99)){ //exit when done x=-100; } } //Populate yesterdayArray for (int x= 0; x!=-99; x++) { //get ready to call the NSUserDefaults NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:[NSString stringWithFormat:@"%@%d",yesterdayString,x]]; AG_Storage *someStorageObject = [NSKeyedUnarchiver unarchiveObjectWithData:data]; AG_Storage *storeToArray = [[AG_Storage alloc]init]; storeToArray.itemName = someStorageObject; if (someStorageObject != nil) { //add the data to the mainArray and update counter [self.yesterdayArray addObject:storeToArray]; self.counter++; } else if ((someStorageObject == nil) && (x==99)){ //exit when done x=-100; } } //Populate tomorrowArray for (int x= 0; x!=-99; x++) { //get ready to call the NSUserDefaults NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:[NSString stringWithFormat:@"%@%d",tomorrowString,x]]; AG_Storage *someStorageObject = [NSKeyedUnarchiver unarchiveObjectWithData:data]; AG_Storage *storeToArray = [[AG_Storage alloc]init]; storeToArray.itemName = someStorageObject; if (someStorageObject != nil) { //add the data to the mainArray and update counter [self.tomorrowArray addObject:storeToArray]; self.counter++; } else if ((someStorageObject == nil) && (x==99)){ //exit when done x=-100; } } } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ if(tableView == tomorrowTableView){ return [self.tomorrowArray count]; } else if(tableView == yesterdayTableView) return [self.yesterdayArray count]; else return [self.mainArray count]; } - (UITableViewCell *)tableView:(UITableView *)tableViewer cellForRowAtIndexPath:(NSIndexPath *)indexPath{ UITableViewCell *cell = [tableViewer dequeueReusableCellWithIdentifier:@"thisCell"]; AG_Storage *toDoItem = [self.mainArray objectAtIndex:indexPath.row]; cell.textLabel.text = toDoItem.itemName; if (toDoItem.completed) { cell.accessoryType = UITableViewCellAccessoryCheckmark; } else{ cell.accessoryType = UITableViewCellAccessoryNone; } return cell; } - (IBAction)unwindToList:(UIStoryboardSegue *)segue { NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"MMMM dd, yyyy"]; AG_AddItemViewController *source = [segue sourceViewController]; AG_Storage *item = source.store; NSDate *dateCreated = item.creationDate; NSString *todayString = [dateFormat stringFromDate:self.todayDate]; NSString *dateCreatedString = [dateFormat stringFromDate:dateCreated]; NSString *tomorrowString = [dateFormat stringFromDate:self.tomorrowsDate]; NSString *yesterdayString = [dateFormat stringFromDate:self.yesterdaysDate]; //Set up file storage! if (item != nil) { if ([dateCreatedString isEqualToString:todayString]) { [self.mainArray addObject:item]; [tableView reloadData]; NSData *data = [NSKeyedArchiver archivedDataWithRootObject:item.itemName]; [[NSUserDefaults standardUserDefaults] setObject:data forKey:[NSString stringWithFormat:@"%@%d",todayString,self.counter]]; [[NSUserDefaults standardUserDefaults] synchronize]; } else if ([dateCreatedString isEqualToString:tomorrowString]){ [self.tomorrowArray addObject:item]; [tableView reloadData]; NSLog(@"THIS WORKED TOO :D"); } else if ([dateCreatedString isEqualToString:yesterdayString]){ [self.yesterdayArray addObject:item]; [tableView reloadData]; NSLog(@"THIS WORKED"); } else{ } } self.counter++; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } #pragma mark - Table view delegate - (void)tableView:(UITableView *)tableViewer didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [tableViewer deselectRowAtIndexPath:indexPath animated:NO]; AG_Storage *tappedItem = [self.mainArray objectAtIndex:indexPath.row]; tappedItem.completed = !tappedItem.completed; [tableViewer reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone]; } - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { // Return YES if you want the specified item to be editable. return YES; } // Override to support editing the table view. - (void)tableView:(UITableView *)tableViews commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"MMMM dd, yyyy"]; NSString *todayString = [dateFormat stringFromDate:self.todayDate]; if (editingStyle == UITableViewCellEditingStyleDelete) { //Delete from storage for (int x = 0; x!=-99; x++) { NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:[NSString stringWithFormat:@"%@%d",todayString,x]]; AG_Storage *someStorageObject = [NSKeyedUnarchiver unarchiveObjectWithData:data]; AG_Storage *storeToArray = [[AG_Storage alloc]init]; storeToArray.itemName = someStorageObject; AG_Storage *toDoItem = [self.mainArray objectAtIndex:indexPath.row]; NSString *compare = toDoItem.itemName; //If they equal then delete from NSUserDefaults if ([compare isEqualToString:someStorageObject]) { [[NSUserDefaults standardUserDefaults]removeObjectForKey:[NSString stringWithFormat:@"%@%d",todayString,x]]; [[NSUserDefaults standardUserDefaults]synchronize]; x=-100; } else { } if (x>10) { x=-100; } } [self.mainArray removeObjectAtIndex:indexPath.row]; [tableViews deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; } } @end 填充yesterdayTableView

2 个答案:

答案 0 :(得分:2)

你可以保留一个tableView。

步骤,一个tableView根据您的需要查看多个单元格

1)为昨天和明天的笔尖/故事板设计单独的单元格
2)通过if else条件点击某个按钮tableView:cellForRowAtIndexPath来交换单元格。

或者转到viewController包含

答案 1 :(得分:0)

有几种方法,

如果您只需要一次显示一个tableView,您可以在tableView:cellForRowAtIndexPath:数据源方法中执行以下操作:

愚蠢的方式

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (kAppState_Yesterday) { // Set the controllerstate so that it knows that the arrayDatasource should be yesterday
        // create and return cell corresponding to yesterdayArray.
    }
}

如果所有单元格看起来都相同,则可以使用NSArray *dataSource并将其分配给不同的数组。

“更聪明一点”

if userClicksButton `display yesterday array`

    self.dataSource = self.yesterdayArray

end

通过这种方式,您的tableView:cellForRowAtIndexPath:会更加一致,因为如果不满足条件的话。

如果事情变得更复杂,我建议使用Controller Containment。