Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.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
Ios 重新加载ViewController_Ios_Uiviewcontroller - Fatal编程技术网

Ios 重新加载ViewController

Ios 重新加载ViewController,ios,uiviewcontroller,Ios,Uiviewcontroller,我有一个视图控制器显示一些信息(不是表视图) 我有一个远程服务器的更新调用,它填充了我的数据库。我想在更新调用完成后完全重新加载ViewController 我该怎么办?更新数据。。。更改按钮标题..任何需要更新的内容 那就打电话吧 [self.view setNeedsDisplay]; 你真的不需要做: [self.view setNeedsDisplay]; 老实说,我认为这是“让我们期待最好的”类型的解决方案,在这种情况下。有几种方法可以更新您的UIViews: KVO 通知 授权

我有一个视图控制器显示一些信息(不是表视图)

我有一个远程服务器的更新调用,它填充了我的数据库。我想在更新调用完成后完全重新加载ViewController


我该怎么办?

更新数据。。。更改按钮标题..任何需要更新的内容

那就打电话吧

[self.view setNeedsDisplay];

你真的不需要做:

[self.view setNeedsDisplay];
老实说,我认为这是“让我们期待最好的”类型的解决方案,在这种情况下。有几种方法可以更新您的
UIView
s:

  • KVO
  • 通知
  • 授权
  • 每一个都有利弊根据您正在更新的内容以及您的业务层(服务器连接)与
    UIViewController之间的“连接”类型,我可以推荐一种适合您需要的连接。

    您必须使用

    -(void)viewWillAppear:(BOOL)animated
    

    如果您知道您的数据库已经更新,并且只想刷新ViewController(这是我的情况),请按照您的意愿设置条目…

    。我没有找到其他解决方案,但我所做的是当我的数据库更新时,我打电话:

    [自视下载]

    再一次,它成功了。请记住,如果您覆盖了其他视图WillView或loadView,则也可以按相同的顺序调用它们。 喜欢

    [自视下载]; [自视显示:是]


    我认为应该有一个更具体的解决方案,比如浏览器中的刷新按钮

    重新初始化视图控制器

    YourViewController *vc = [[YourViewController alloc] initWithNibName:@"YourViewControllerIpad" bundle:nil];
    [self.navigationController vc animated:NO];
    

    试试这个,你必须调用这两种方法来重新加载视图, 因为这个对我有用

    -目标-C

    [self viewDidLoad]; 
    [self viewWillAppear:YES];
    
    -迅捷的

    self.viewDidLoad()
    self.viewWillAppear(true)
    

    再次指向ViewController。在我的情况下,
    [self.view setNeedsDisplay]
    [自查看加载];[自视显示:是]不起作用,但下面的方法起作用

    在目标C中

    UIStoryboard *MyStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil ];
    UIViewController *vc = [MyStoryboard instantiateViewControllerWithIdentifier:@"ViewControllerStoryBoardID"];
    [self presentViewController:vc animated:YES completion:nil];
    
    斯威夫特:

    let secondViewController = self.storyboard!.instantiateViewControllerWithIdentifier("ViewControllerStoryBoardID")   
    self.presentViewController(secondViewController, animated: true, completion: nil)
    

    如果要重新加载最初从XIB加载的ViewController,可以使用下一个UIViewController扩展:

    extension UIViewController {
        func reloadViewFromNib() {
            let parent = view.superview
            view.removeFromSuperview()
            view = nil
            parent?.addSubview(view) // This line causes the view to be reloaded 
        }
    }
    

    不建议调用ViewDidLoad,否则ViewWill将自行显示

    在ViewDidLoad中,包含一个loadData()函数来准备数据。这是在初始运行时执行的


    要重新加载时,再次调用loadData()以从模型中获取数据。在tableView中调用reloadData()或在常规视图中设置NeedsDisplay()。

    对于
    UIViewController
    只需再次加载视图-

    func rightButtonAction() {
            if isEditProfile {
               print("Submit Clicked, Call Update profile API")
                isEditProfile = false
                self.viewWillAppear(true)
            } else {
                print("Edit Clicked, Call Edit profile API")
                isEditProfile = true
                self.viewWillAppear(true)
            }
        }
    

    我正在配置文件编辑和查看配置文件上加载视图控制器。根据Bool值
    isEditProfile
    更新
    视图中的视图将出现
    方法。

    您当前如何更新数据?我假设您使用的是ViewDidDisplay?您不能使用NotificationCenter或协议通知您的ViewController更新已结束吗?@Khal我从未使用过通知中心,你能给我指一本教程或指南吗@直到我使用
    viewWill/did出现
    以及
    loadView
    viewDidLoad
    为止。这里有一个关于NSNotificationCenter的教程:但仅供您自己记录,我宁愿使用协议通知您的ViewController更新已结束;)我必须从数据库中重新加载几个条目。我不认为重画视图是解决问题的方法。我在需要的时候就用了这个。这个答案并不能真正回答问题。您建议了3种重新加载视图的方法,但您没有详细说明,甚至没有提供指向如何实现这些建议的信息的链接。我希望使用类似于推送新视图的动画重新加载子视图。这可能是关于何时向web服务发送请求以加载数据的有效提示,但它没有回答如何异步处理web服务响应以更新视图。这是一种老式的方式。带有故事板的现代项目很可能不会使用XIB;用故事板代替。这不是正确的答案。当您调用viewDidLoad以重新加载视图时,应用程序的内存将增加。这不是正确的答案。它仍然适用于其他应用程序,因此请不要使用downmark@singapore调用控制器生命周期方法。因此,不建议使用任何方法重新加载而不增加应用程序的内存吗@新加坡在我看来,“重新加载ViewController”的最佳方式就是从内存中删除对象并创建一个全新的对象(如上所述)。这还会从VC中实例化的内存中删除viewModels等(假设没有循环引用问题)。仅仅是切换视图并不能真正解决问题,也不能解释在VC外部运行的逻辑正在被刷新。永远不要调用生命周期方法!!!使用[self.view setNeedsDisplay]或[self.view setNeedsLayout]例如hi@juancazalla,我尝试了上面的代码片段来刷新我的视图控制器,因此它再次从控制器调用
    viewdidload()
    方法。如何退出此
    视图加载了
    调用并刷新了我的视图。