如何从另一个 UIViewController 重新加载 UITableViewController

Posted

技术标签:

【中文标题】如何从另一个 UIViewController 重新加载 UITableViewController【英文标题】:How to reload a UITableViewController from another UIViewController 【发布时间】:2012-08-28 13:21:21 【问题描述】:

我想从另一个视图控制器重新加载一个表视图(我正在处理 PSStackedViewExample https://github.com/steipete/PSStackedView)。我进行修改的 UIViewController 在我的 UITableViewController 上有点,我正在对当前在我的 TableView 上的数据进行更改,这就是为什么我想重新加载 tableview 以在我修改 UIViewController 上的某些内容时直接查看更改。

我无法访问它...每次我对此感到疯狂,你能帮帮我吗?

在 PSStackedViewExample 项目中,我说的 UITableViewController 是 ExampleViewController2。 我正在谈论的 UIViewController 是:ExampleViewController1

这里是一些代码片段,以防你不下载项目:

ExampleMenuRootController 是主控制器,它调用 UITableViewController

.h 首先 ->

#import <UIKit/UIKit.h>
#import "Guest.h"

@interface ExampleMenuRootController : UIViewController <UITableViewDataSource, UITableViewDelegate> 
    UITableView *menuTable_;
    NSArray *cellContents_;
    singleObjGetData * sObjDataForRootVC;
    UIViewController *viewController;

@property (nonatomic, retain)  UIViewController *viewController;
@property (nonatomic,strong) NSManagedObjectContext* managedObjectContext;
- (void)checkDictionnaryForIndexPathForFunction;
-(IBAction)showTable:(id)sender;
- (void)checkDictionnaryForIndexPath:(NSString *)check;
@end

.m ->

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

    PSStackedViewController *stackController = XAppDelegate.stackController;
     viewController = nil;

        [sObjDataForRootVC.tmpGuest removeAllObjects];
        [self checkDictionnaryForIndexPath:@"0"];
        [self checkDictionnaryForIndexPath:@"1"];
        [self checkDictionnaryForIndexPath:@"2"];
    if (indexPath.row > 0 && indexPath.row < 4)
    
    [sObjDataForRootVC.tmpGuest removeAllObjects];
    [self checkDictionnaryForIndexPath:[NSString stringWithFormat:@"%i", indexPath.row - 1]];
    
    if (indexPath.row > 3 && indexPath.row < 8)
    
        [sObjDataForRootVC.tmpGuest removeAllObjects];
        [self checkDictionnaryForIndexPathForFunction];
    

    while ([stackController.viewControllers count]) 
        [stackController popViewControllerAnimated:YES];
    

// HERE I CALL THE UITABLEVIEWCONTROLLER !!!

    viewController = [[ExampleViewController2 alloc] initWithStyle:UITableViewStylePlain];     
    ((ExampleViewController2 *)viewController).indexNumber = [stackController.viewControllers count];

    if (viewController) 
        [XAppDelegate.stackController pushViewController:viewController fromViewController:nil animated:YES];
    

然后在下面,UIViewController 的.h 将修改 UITableView。我需要从以前的 UITableViewController 对 tableview 执行 reloadData

#include "PSStackedViewDelegate.h"
#import "AppDelegate.h"

@interface ExampleViewController1 : UIViewController <PSStackedViewDelegate, UITextFieldDelegate>

    IBOutlet UIButton *validateBtn;
    IBOutlet UIButton *cancelBtn;

    singleObjGetData *sObjDataForRootVC;

.m

#import "ExampleViewController1.h"
#import "ExampleViewController2.h"
#import "ExampleMenuRootController.h"
#import "PSStackedView.h"

@implementation ExampleViewController1


#pragma mark - View lifecycle

- (void)viewDidLoad 

    sObjDataForRootVC  = [singleObjGetData singleObj];
    confirmPressed = NO;
    [self setUpView];

    [super viewDidLoad];
    self.view.width = PSIsIpad() ? 400 : 150;

非常感谢您的帮助...

【问题讨论】:

不是添加代码块(人们可以从链接下载代码),而是添加一些屏幕截图来详细说明您的问题是什么 我现在无法访问 ftp 服务器,对不起 【参考方案1】:

您可以通过在第二个 tableview 中设置一个通知来调用第一个 tableview 上的 reloadData 来做到这一点。把它放在你的第二个 tableView 中:

[[NSNotificationCenter defaultCenter]
 postNotificationName:@"refreshData"
 object:nil
 userInfo:nil//userInfoDictionary
 ];

在你的第一个 tableView 中放这个:

[[NSNotificationCenter defaultCenter]
 addObserver:self
 selector:@selector(methodToRefreshYourFirstTable)
 name:@"refreshData"
 object:nil];

【讨论】:

以上是关于如何从另一个 UIViewController 重新加载 UITableViewController的主要内容,如果未能解决你的问题,请参考以下文章

如何从另一个 UIViewController 重新加载 UITableViewController

如何从另一个 UIViewController 更改分段控件标题(设置)

如何从另一个/第二个 UIViewController 隐藏 UILabel?

从另一个 UIViewController 中呈现一个 UIViewController?

从另一个 UIViewController 呈现 UIViewController

有没有办法查看当前 UIViewController 是不是从另一个 UIViewController 的解雇中出现