我有2个TableViewControllers.当用户点击UIBarButtonItem时,它会在SaveViewController中保存来自UITextField,runnameField的文本.它应该采用runnameField的文本并将其放在一个数组,runsArray中.在RecordVC中,tableView的数据应来自runsArray.
有人可以帮我这个吗?我一直在谷歌搜索很长时间,找不到任何答案.
有人可以帮我这个吗?我一直在谷歌搜索很长时间,找不到任何答案.
SaveViewController.h:
#import <UIKit/UIKit.h> #import "RecordsViewController.h" //Next ViewController @interface SaveViewController : UITableViewController <UITableViewDataSource,UITableViewDelegate> { __weak IBOutlet UITextField *runnameField; RecordsViewController *RecordsVCData; } @property (weak,nonatomic) IBOutlet UITextField *runnameField; @property (weak,nonatomic) IBOutlet UITextView *runnotesTextView; @property (weak,nonatomic) IBOutlet UIBarButtonItem *saveBarItem; @property (nonatomic,retain) RecordsViewController *RecordsVCData; - (IBAction)saverun:(UIBarButtonItem *)sender; - (IBAction)goAwayKeyboard:(id)sender; @end
SaveViewController.m:
- (IBAction)saverun:(UIBarButtonItem *)sender { RecordsViewController *RecordsVC = [[RecordsViewController alloc] initWithNibName:nil bundle:nil]; RecordsVC.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped]; self.RecordsVCData = RecordsVC; [RecordsVC.runsArray addObject:[NSString stringWithFormat:@"%@",runnameField.text]]; [self presentModalViewController:RecordsVC animated:YES]; } - (IBAction)goAwayKeyboard:(id)sender { [sender resignFirstResponder]; }
RecordsViewController.h:
#import <UIKit/UIKit.h> @interface RecordsViewController : UITableViewController <UITableViewDataSource,UITableViewDelegate> { NSMutableArray *runsArray; } @property (weak,nonatomic) NSString *runname; @property (strong,nonatomic) NSString *runnotes; @property (weak,nonatomic) UITableViewCell *cell; @property (retain,nonatomic) NSMutableArray *runsArray; @end
RecordsViewController.m:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath { // Identifier for retrieving reusable cells. static NSString *cellIdentifier = @"MyCellIdentifier"; // Attempt to request the reusable cell. UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; // No cell available - create one if(cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; [cell.textLabel setText:[NSString stringWithFormat:@"%@",[runsArray objectAtIndex:indexPath.row]]]; } // Set the text of the cell to the runnamestring. [cell.textLabel setText:[NSString stringWithFormat:@"%@",[runsArray objectAtIndex:indexPath.row]]]; return cell; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [runsArray count]; }
任何帮助都很受欢迎.
谢谢,
Dhruv直升机
解决方法
在你更新RecordsVC.runsArray的时候,我想你的tableview已经被初始化和加载了,虽然没有数据.
我最近在这种情况下所做的是使用通知.
在RecordsViewController中,您将在init方法中注册通知:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dataLoaded:) name:@"runsArrayLoaded" object:nil]; // Custom initialization } return self; }
同样在RecordsViewController中,您将需要在收到通知时调用的方法.在这种情况下,它是dataLoaded:
-(void) dataLoaded:(NSNotification *)notif { if (notif.userInfo){ runsArray = [notif.userInfo objectForKey:@"newdata"]; [self.tableview reloadData]; } }
使所有这些神奇工作的部分在SaveViewController类中的saverun方法中.
- (IBAction)saverun:(UIBarButtonItem *)sender { RecordsViewController *RecordsVC = [[RecordsViewController alloc] initWithNibName:nil bundle:nil]; RecordsVC.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped]; [runsArray addObject:[NSString stringWithFormat:@"%@",runnameField.text]]; [self presentModalViewController:RecordsVC animated:YES]; // notify the RecordsViewController that new data is available NSMutableDictionary* userInfo = [[NSMutableDictionary alloc] initWithCapacity:1]; [userInfo setObject:runsArray forKey:@"newdata"]; [[NSNotificationCenter defaultCenter] postNotificationName:@runsArrayLoaded" object:nil userInfo:(NSDictionary*)userInfo]; }
最后,您必须清理并删除RecordsViewController类中的通知观察.在viewWillDisappear中,添加以下行:
[[NSNotifcation defaultCenter] removeObserver:self name:@"runsArrayLoaded" object:nil];