问题
So,
I have a form (which is basically a UITableView), and once I finish the form, I click the 'Done' button which is on top of the screen.
After clicking, I need to add the data to another tableView (which is in another tableViewController). This table is also inside a Navigation Controller.
After I press the Done Button, I need the presentModalViewController to be the new TableView (with the new data) along with the Navigation Controller on top of the tableView.
So, to summarize:
- The Done Button is in someTableViewController.
- I need to add an object (lets just say I am adding a a name called "Dobby" for simplicity) into another tableView called dogTableViewController.
- I reload the data , and present the screen which has dogTableViewController inside the dogNavigationController.
- All the classes are referenced properly and included.
I am pasting the -(IBAction) when the Done Button is clicked.
-(IBAction) doneWithData: (UIBarButtonItem*) sender{
UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
indicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge;
[indicator sizeToFit];
indicator.autoresizingMask = (UIViewAutoresizingFlexibleLeftMargin |
UIViewAutoresizingFlexibleRightMargin |
UIViewAutoresizingFlexibleTopMargin |
UIViewAutoresizingFlexibleBottomMargin);
indicator.tag = 1;
[self.view addSubview:indicator];
[indicator setBackgroundColor:[UIColor clearColor]];
indicator.center = self.view.center;
indicator.hidden = FALSE;
[indicator startAnimating];
if (self.dogTableViewController == nil)
{
DogTableViewController *temp = [[DogTableViewController alloc] init];
self.dogTableViewController = temp;
[temp release];
}
if (self.dogNavigationController == nil)
{
DogNavigationController *temp = [[DogNavigationController alloc] init];
self.dogNavigationController = temp;
[temp release];
}
[self.dogTableViewController.dogArray addObject:@"Dobby"];
[self.dogTableViewController.tableView reloadData];
NSLog (@"%@", [self.dogTableViewController.dogArray objectAtIndex:0]);
//Prints out "Null" //
[self presentModalViewController:dogNavigationController animated:YES];
[indicator release];
}
When I do all this and Click the Done button,
I get an empty Navigation Screen with NO TABLE in it. Plus I also had some buttons on the dogNavigationController screen. Nothings visible !!
My objective is to just transfer the screen to this new screen (which happens to be a home screen, and not the rootController). Do you think I should go with the modalViewController for this task ? Do you think I should use some other way to transfer data to another screen ?
p.s. I do not want to use PushViewController.
回答1:
I think you should do
[self.navigationController popToRootViewControllerAnimated:YES];
rather. To get the root view controller, you can do,
DogTableViewController * viewController = [self.navigationController.viewControllers objectAtIndex:0];
[viewController.dogArray addObject:aDog];
Original Answer
Shouldn't you be initializing a navigation controller with the root view controller?
DogNavigationController *temp = [[DogNavigationController alloc] initWithRootViewController:self.dogTableViewController];
来源:https://stackoverflow.com/questions/6281451/presentmodalviewcontroller-problem