Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 是否可以强制重建导航控制器的上一个视图_Objective C_Uinavigationcontroller - Fatal编程技术网

Objective c 是否可以强制重建导航控制器的上一个视图

Objective c 是否可以强制重建导航控制器的上一个视图,objective-c,uinavigationcontroller,Objective C,Uinavigationcontroller,我在上一个视图中有一个表视图,它是从我的应用程序中的数组获取数据。我有一个更新数据的视图,它是按单元格选择。在视图中更新数据后,我调用 [self.navigationController popViewControllerAnimated:YES]; 返回到上一个视图。但是标签上堆满了新旧数据我不知道为什么。。。如果我返回一个视图,然后再次返回tableview,则一切正常,只显示新数据 所以我想我必须重建视图来避免这个问题。这可能吗?您应该在每次显示表视图时刷新它;否则,旧数据将被缓存

我在上一个视图中有一个表视图,它是从我的应用程序中的数组获取数据。我有一个更新数据的视图,它是按单元格选择。在视图中更新数据后,我调用

[self.navigationController popViewControllerAnimated:YES]; 

返回到上一个视图。但是标签上堆满了新旧数据我不知道为什么。。。如果我返回一个视图,然后再次返回tableview,则一切正常,只显示新数据


所以我想我必须重建视图来避免这个问题。这可能吗?

您应该在每次显示表视图时刷新它;否则,旧数据将被缓存

在控制表视图的控制器中:

- (void)viewWillAppear {
    [tableView reloadData];
}

您的问题最初是关于重建控制器的,下面是答案:

我假设您的导航堆栈如下所示:

@protocol ThirdControllerDelegate;

@class ThirdController : UIViewController

@property (nonatomic, weak) id<ThirdControllerDelegate> delegate;

... your existing stuff ...

@end

@protocol ThirdControllerDelegate <NSObject>

- (void)thirdControllerDidDoTheThing:(ThirdController *)thirdController;

@end
- (void)thirdControllerDidDoTheThing:(ThirdController *)thirdController
{
    [self.delegate secondControllerDidDoTheThing:self];
}
FirstController的实例 SecondController的实例 ThirdController的一个实例 在第三个控制器中发生了一件事,您现在希望堆栈如下所示:

@protocol ThirdControllerDelegate;

@class ThirdController : UIViewController

@property (nonatomic, weak) id<ThirdControllerDelegate> delegate;

... your existing stuff ...

@end

@protocol ThirdControllerDelegate <NSObject>

- (void)thirdControllerDidDoTheThing:(ThirdController *)thirdController;

@end
- (void)thirdControllerDidDoTheThing:(ThirdController *)thirdController
{
    [self.delegate secondControllerDidDoTheThing:self];
}
FirstController的实例 SecondController的一个新实例 要做的第一件事是在头文件中定义ThirdController的委托协议,如下所示:

@protocol ThirdControllerDelegate;

@class ThirdController : UIViewController

@property (nonatomic, weak) id<ThirdControllerDelegate> delegate;

... your existing stuff ...

@end

@protocol ThirdControllerDelegate <NSObject>

- (void)thirdControllerDidDoTheThing:(ThirdController *)thirdController;

@end
- (void)thirdControllerDidDoTheThing:(ThirdController *)thirdController
{
    [self.delegate secondControllerDidDoTheThing:self];
}
您还需要以相同的方式为SecondController定义一个委托协议,并指定SecondController可以作为第三个控制器的委托:

当SecondController从ThirdController获取消息时,它应该将消息传递给其委托,如下所示:

@protocol ThirdControllerDelegate;

@class ThirdController : UIViewController

@property (nonatomic, weak) id<ThirdControllerDelegate> delegate;

... your existing stuff ...

@end

@protocol ThirdControllerDelegate <NSObject>

- (void)thirdControllerDidDoTheThing:(ThirdController *)thirdController;

@end
- (void)thirdControllerDidDoTheThing:(ThirdController *)thirdController
{
    [self.delegate secondControllerDidDoTheThing:self];
}
最后,我们修改FirstController,使其可以充当SecondController的委托:

最后,我们实现SecondController的委托方法以弹出到第一个控制器,然后显示一个新的SecondController

- (void)secondControllerDidDoTheThing:(SecondController *)secondController
{
    [self.navigationController popToViewController:self animated:NO];
    [self showSecondControllerAnimated:NO];
}
完成了


你已经改变了你的问题;在您现在描述的情况下,您可以按照上面的步骤使SecondController成为ThirdController的代理,但在ThirdController中,您只需重新加载SecondController视图的数据;如果是UITableView或UICollectionView,您可以使用reloadData方法进行操作。

我以前的视图中有一个表视图,它是从我的应用程序中的数组获取数据。我有一个更新数据的视图,它是按单元格选择。在视图中更新数据后,我调用[self.navigationController popViewControllerAnimated:YES];返回到上一个视图。但是标签上堆满了新旧数据我不知道为什么。。。如果我返回一个视图,然后再次返回到tableview,则一切正常,只显示新数据。请编辑您的问题并将其添加到那里。谢谢。标签上堆满了新旧数据。我不知道为什么这是您需要解决的问题。请发布与此标签相关的截图和源代码。这似乎是一个很好的解决方案,我将实现此功能并检查结果