我有两个 UIViewController,一个是 UIPickerViewController,另一个是 UITableViewController。理想情况下,Picker 应该收到用户的请求,将 x 数量的项目添加到 tableView。 Picker 获取用户输入并将它们分配给变量 val1、val2、val3,其中 val1 是项目数(行数),val2 是项目的名称或标签。
PickerViewController.m
- (IBAction)add:(id)sender
{
TableViewController *tvc = [[TableViewController alloc] init];
[tvc setValues:self.val1 :self.val2 :self.val3];
[self presentViewController:tvc animated:YES completion:nil];
}
TableViewController.m
-(void)setValues:(NSString *)newVal1 :(NSString *)newVal2 :(NSString *)newVal3
{
self.val1 = newVal1;
self.val2 = newVal2;
self.val3 = newVal3;
}
- (void)viewDidLoad
{
[super viewDidLoad];
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"UITableViewCell"];
// This is just a header which holds my "Add" button
UIView *header = self.headerView;
[self.tableView setTableHeaderView:header];
[self addNew:self.val1 :self.val2 :self.val3];
}
- (void)addNew:(NSString *)newVal1 :(NSString *)newVal2 :(NSString *)newVal3
{
if(!self.numberOfRows){
NSLog(@"Initially no of rows = %d", self.numberOfRows);
self.numberOfRows = [self.val1 intValue];
NSLog(@"Then no of rows = %d", self.numberOfRows);
}
else
{
self.numberOfRows = self.numberOfRows + [newVal1 intValue];
NSLog(@"New no rows = %d", self.numberOfRows);
}
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:self.numberOfRows inSection:0];
// Only run when called again .. not initially
if(self.run != 0){
[self.tableView beginUpdates];
[self.tableView insertRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationBottom];
self.run ++;
[self.tableView endUpdates];
}
}
// "ADD" button which should go back to the picker and get new items to add to the table
- (IBAction)testAdd:(id)sender
{
PickerViewController *pvc = [[PickerViewController alloc] init];
[self presentViewController:pvc animated:YES completion:nil];
}
现在,我意识到每次调用下一个 View Controller 时我都在创建它的一个新实例,但我不知道该怎么做,我认为这是主要问题。截至目前,我希望当我离开选择器 View 的 TableView 并返回时,控制台应该记录“新的行数 = x”,但这并没有发生。
我知道没有使用 val3,我的 addNew: 可能不是最好的,但我只需要它来处理上面提到的基本日志记录,我应该可以从那里获取它。
卡在这几天了
最佳答案
为 TableViewController 创建一个属性,并且只在第一次呈现时创建它,
- (IBAction)add:(id)sender {
if (! self.tvc) {
self.tvc = [[TableViewController alloc] init];
}
[self.tvc setValues:self.val1 :self.val2 :self.val3];
[self presentViewController:self.tvc animated:YES completion:nil];
}
从您的问题中,您并不能完全清楚地知道是这个演示文稿还是您正在谈论的 TableView 类中的演示文稿。看起来您在表示方面做错了什么——您从 TableView Controller 中呈现选择器 View ,并且还从选择器中呈现 TableView Controller 。这是不正确的,您应该展示您希望第二个出现的 Controller ,并且该 Controller 应该使用 dismissViewControllerAnimated
返回,而不是展示另一个 Controller 。
关于ios - 我怎样才能交替 View Controller 而不丢失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24064268/