Ios 将数组从RightChildViewController传递到MainVIewController
我在使用SlidingViewController时遇到问题。我的滑动视图控制器有一个左视图控制器、一个主视图控制器和一个右视图控制器。“我的左视图控制器”是菜单样式的视图控制器,它将主视图控制器切换到选定的视图控制器。右视图控制器是一个表视图控制器,最近使用NSUserDefault键进行了搜索。此键是一个包含4个字符串的数组。我遇到的问题是将此字符串发送回主视图控制器,因为主视图控制器的VIEWWILLEXEEN不会被调用,因为从技术上讲,它从未离开屏幕(即它从未消失) 我尝试让视图控制器调用ViewDidDisplay手动,但似乎初始化主视图控制器会一起创建一个全新的viewController,而不会在主视图控制器内创建tableView,因此不会加载或重新加载表视图。此外,当我记录tableView时,它显示为(null) 以下是LeftViewController的didSelectRowAtIndexPathIos 将数组从RightChildViewController传递到MainVIewController,ios,iphone,objective-c,uitableview,uiviewcontroller,Ios,Iphone,Objective C,Uitableview,Uiviewcontroller,我在使用SlidingViewController时遇到问题。我的滑动视图控制器有一个左视图控制器、一个主视图控制器和一个右视图控制器。“我的左视图控制器”是菜单样式的视图控制器,它将主视图控制器切换到选定的视图控制器。右视图控制器是一个表视图控制器,最近使用NSUserDefault键进行了搜索。此键是一个包含4个字符串的数组。我遇到的问题是将此字符串发送回主视图控制器,因为主视图控制器的VIEWWILLEXEEN不会被调用,因为从技术上讲,它从未离开屏幕(即它从未消失) 我尝试让视图控制器调
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UIStoryboard *iPhoneStoryBoard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];
ViewController *viewController = (ViewController *)[iPhoneStoryBoard instantiateViewControllerWithIdentifier:@"HomePage"];
viewController.reloadArray = self.recentSearchesArray[indexPath.row];
NSLog(@"Recent ReloadArray: %@", viewController.reloadArray); //This prints out the correct information
/*
MenuViewController *menuViewController = [[MenuViewController alloc] initWithNibName:@"MenuViewController" bundle:nil];
SlidingViewController *slidingViewController = [[SlidingViewController alloc] initWithNibName:@"SlidingViewController" bundle:[NSBundle mainBundle] mainViewController:viewController leftViewController:menuViewController andRightViewController:self];*/ //Tried doing this too, doesn't work
[viewController viewWillAppear:YES];
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
[self performSelector@selector(toggleView)];
}
-(void)viewWillAppear:(BOOL)animated
{
if(self.reloadArray.count !=0)
{
NSLog(@"Reload Array Not Empty!");
NSLog(@"ReloadArray: %@",self.reloadArray); // Logs out the correct information
[self.homePageTableView reloadData];
NSLog(@"Table: %@", self.homePageTableView); // Logs out as (null) :(
}
else
{
NSLog(@"Reload Array Is Empty");
}
}
ViewController的视图将出现
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UIStoryboard *iPhoneStoryBoard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];
ViewController *viewController = (ViewController *)[iPhoneStoryBoard instantiateViewControllerWithIdentifier:@"HomePage"];
viewController.reloadArray = self.recentSearchesArray[indexPath.row];
NSLog(@"Recent ReloadArray: %@", viewController.reloadArray); //This prints out the correct information
/*
MenuViewController *menuViewController = [[MenuViewController alloc] initWithNibName:@"MenuViewController" bundle:nil];
SlidingViewController *slidingViewController = [[SlidingViewController alloc] initWithNibName:@"SlidingViewController" bundle:[NSBundle mainBundle] mainViewController:viewController leftViewController:menuViewController andRightViewController:self];*/ //Tried doing this too, doesn't work
[viewController viewWillAppear:YES];
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
[self performSelector@selector(toggleView)];
}
-(void)viewWillAppear:(BOOL)animated
{
if(self.reloadArray.count !=0)
{
NSLog(@"Reload Array Not Empty!");
NSLog(@"ReloadArray: %@",self.reloadArray); // Logs out the correct information
[self.homePageTableView reloadData];
NSLog(@"Table: %@", self.homePageTableView); // Logs out as (null) :(
}
else
{
NSLog(@"Reload Array Is Empty");
}
}
有没有人有任何建议/想法,或者有没有人做过类似的事情,或者遇到过这个问题?如果是这样,请提供任何信息和指导。提前谢谢 您可以使用通知中心方法。在主视图控制器的viewdidload方法中,编写以下代码
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(anymethod:)
name: anyname
object: nil];
- (void)anymethod:(NSNotification *)notification {
NSLog(@"%@", notification.userInfo);
}
在右视图中,控制器传递数据,如
[[NSNotificationCenter defaultCenter] postNotificationName:@"anyname" object:self userInfo:anydata];
我对这个设计有点困惑。您正在处理自定义视图控制器容器吗?您在NSUserdefaults中究竟存储了什么?@KyleC没有,只是在使用常规视图控制器。我有一个滑动视图控制器,它有一个主视图控制器、一个左视图控制器和一个右视图控制器。这些只是普通的UIViewController或UITableViewController。我在里面存储了一个NSMutableArray。如果你不使用控制器容器,你可能会得到非法的视图控制器层次结构。P:谢谢!这正是我想要的。它工作得很好。