1

我有一个拆分视图控制器,其中任一侧都有表视图,并且每次在任一侧发生某些交互时都需要重新加载表数据。每当在拆分视图控制器的左侧(主)上选择一个单元格时,我已经实现了委托来更新我的详细视图控制器。

1.我想知道我是否需要实现另一个委托以使其以两种方式发生(即更新主视图时)或者是否有任何通用方法。

2.我已经为这两个类编写了代码,所以发生的情况是,当我选择左侧的单元格时,右侧会通过委托方法重新加载/刷新视图进行更新,但是 viewWillAppear/viewDidAppear/viewWillDisapper 等方法是不叫。我现在从左侧单元格选择时触发的委托方法手动调用 viewWillAppear 方法。我是否缺少一种技术,以便自动调用类方法。或者谁能​​指出使用 splitViewController 的最佳方法?

4

4 回答 4

2

首先,从您的代码中调用 viewWillAppear 等可能不是一个好主意,因为这些行为将来可能会发生变化。(例如,在早期的 iO​​S 版本中,viewDidLoad 曾经被多次调用,现在每个实例调用一次)。您可以将代码移动到单独的方法中。

其次,您可能希望将 NSNotification 视为传达更改的一种方式。这很容易,并且不需要您保留任何委托指针。

例如,您可以添加到子视图控制器 .h:

#define MASTER_UPDATED  @"MasterUpdated"
#define DETAIL_UPDATED  @"DetailUpdated"

然后在主控制器中类似:

[[NSNotificationCenter defaultCenter] addObserver:self 
   selector:@selector(updateFromDetail:) name:DETAIL_UPDATED object:nil];

...

-(void)updateFromDetail:(NSNotification *)no
{
    NSDictionary *nd = [no userInfo]; // get relevant information

    // take action....
}

从细节方面来看,当一个项目被点击时,你会发送如下消息:

NSDictionary *userInfo = @{@"somekey":@"somevalue", @"anotherkey":@"anothervalue"};

[[NSNotificationCenter defaultCenter] postNotificationName:DETAIL_UPDATED 
    object:self userInfo:userInfo];
于 2016-07-16T16:15:44.197 回答
1

您可能需要使用reload...UITableView 的一种方法来重新加载表格。该reloadData方法将重新加载完整的表。如果您知道更改了哪些行,那么使用其他方法之一可能会更好。如果更改也在行数中,那么您需要使用insert...ordelete...方法之一来获得正确的动画。有关所有详细信息,请参阅UITableView 文档

对于您的第一个问题,我希望详细视图控制器将主人作为代表。但是主人应该只知道右边是哪个细节视图控制器。毕竟,他已经开始了。

于 2016-07-16T16:01:39.213 回答
0

回答您的问题:

1º 协议 UISplitViewControllerDelegate 有一个方法表示 splitviewcontroller 何时改变显示模式。此方法对于更新某些视图控制器的数据非常有用。

- (void)splitViewController:(UISplitViewController *)svc willChangeToDisplayMode:(UISplitViewControllerDisplayMode)displayMode;

2º另一方面,当用户选择单元格或任何其他操作时,您可能需要更新视图控制器的数据。

如果您分享有关您的代码的更多信息,我可以更具体。

于 2018-07-03T10:54:17.770 回答
0

嗨@Divjyot我现在正在处理类似的场景,但是我必须在单击单元格时详细更改为不同的viewcontrolelrVIewController(SecondaryViewController),所以这就是我所做的,我在masterViewController(PrimaryViewCOntroller)中创建了所有viewcontrollers并传递给使用委托选择单元格的 detailViewController。因此,单击primaryViewControlelr 中的单元格会使用新的ViewController 更新secondaryViewCONtroller。如果您想了解更多关于如何在下面实施此评论的信息

于 2016-07-19T07:40:18.563 回答