ios - 将数组从 RightChildViewController 传递到 MainVIewController

标签 ios iphone objective-c uitableview uiviewcontroller

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

我试图让 View Controller 手动调用 viewDidAppear,但似乎初始化主视图 Controller 会一起创建一个全新的 viewController,并且不会在主视图 Controller 内创建 tableView,因此不会加载重新加载 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");
    }
}

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

最佳答案

您可以使用通知中心方法。在主视图 Controller 的 viewdidload 方法中编写以下代码..

[[NSNotificationCenter defaultCenter] addObserver: self
                                         selector: @selector(anymethod:) 
                                             name: anyname 
                                           object: nil];

- (void)anymethod:(NSNotification *)notification {
  NSLog(@"%@", notification.userInfo);  

}

并在您的右 View Controller 中传递如下数据,

[[NSNotificationCenter defaultCenter] postNotificationName:@"anyname" object:self userInfo:anydata];

关于ios - 将数组从 RightChildViewController 传递到 MainVIewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19595589/

相关文章:

ios - 尽管实现正确,但无法在设备上接收推送通知

objective-c - iPhone 拿着 "upwards"或放在 table 上

ios - 后退按钮在 UINavigationController 中奇怪地消失但继续工作

ios - UIPopover 上的 UITextField 不显示键盘

ios - 检查节点是否为 SKShapeNodes

iphone - ipad 未调用 didSelectAnnotationView

ios - 核心音频 AudioBuffer mData

ios - 工作区警告 : Target Pods cannot link framework Foundation. 框架

ios - 在 Swift 的手势识别器中获取触摸窗口坐标?

iphone - 在 iPhone 中验证电子邮件