【问题标题】:Passing Array from RightChildViewController to MainVIewController将数组从 RightChildViewController 传递给 MainVIewController
【发布时间】:2013-10-25 17:02:09
【问题描述】:

我在使用 SlidingViewController 时遇到问题。我的滑动视图控制器有一个左视图控制器、一个主视图控制器和一个右视图控制器。我的左视图控制器是菜单样式的视图控制器,并将主视图控制器切换到选定的视图控制器。右视图控制器是一个表视图控制器,它使用 NSUserDefault 键进行最近搜索。该键是一个包含 4 个字符串的数组。我遇到的问题是将这个字符串发送回主视图控制器,因为主视图控制器的 viewWillAppear 没有被调用,因为从技术上讲它永远不会离开屏幕(即它永远不会消失)。

我试图让视图控制器手动调用 viewDidAppear,但似乎初始化主视图控制器会一起创建一个全新的视图控制器,并且不会在主视图控制器内创建 tableView,因此不会加载重新加载表格视图。此外,当我记录它时,tableView 显示为 (null)。

这里是 LeftViewController 的 didSelectRowAtIndexPath

- (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)];

}

ViewController 的 viewWillAppear

-(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");
    }
}

任何人有任何建议/想法,或者有没有人处理过类似的事情或遇到过这个问题?如果是这样,任何信息和指导将不胜感激。提前致谢!

【问题讨论】:

  • 我对这个设计有点困惑。您在处理自定义视图控制器容器吗?你到底在 NSUserdefaults 中存储了什么?
  • @KyleC 不,只是使用常规视图控制器。我有一个滑动视图控制器,它有一个主视图控制器、一个左视图控制器和一个右视图控制器。这些只是常规的 UIViewControllers 或 UITableViewControllers。我在里面存储了一个 NSMutableArray。
  • 如果你不使用控制器容器,你可能会得到一个非法的视图控制器层次结构。

标签: ios iphone objective-c uitableview uiviewcontroller


【解决方案1】:

您可以使用通知中心方法。在您的主视图控制器的 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];

【讨论】:

  • P:谢谢!这正是我一直在寻找的。它工作得很好。
猜你喜欢
  • 1970-01-01
  • 2012-02-10
  • 2018-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-15
相关资源
最近更新 更多