【问题标题】:Reload UITableView after dismissing programmatically modally presented UIViewController关闭以编程方式呈现的 UIViewController 后重新加载 UITableView
【发布时间】:2017-07-22 03:33:33
【问题描述】:

我有两个 ViewController。第一个 ViewController 有一个 TableView。我以编程方式呈现第二个 ViewController。在第二个 ViewController 中,我下载了一个图像。现在我在下载完成后关闭第二个 ViewController。同时,我想用图像更新 TableView 并选择特定的单元格。

我已经使用委托来执行此过程。但它无法更新 TableView。

我使用viewDidAppear、viewWillAppear 方法重新加载TableView。但没有效果。

谁能建议我完成这个特定的任务?

我已经通过这种方式展示了我的第二个 ViewController:

ImageSelectionViewController *viewController= [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"modal"];
viewController.modalPresentationStyle = UIModalPresentationCustom;
viewController.carDownloadName = [self.listOfItem objectAtIndex:sender.tag];

[self presentViewController:viewController animated:YES completion:nil];

并以这种方式关闭 ViewController:

[self dismissViewControllerAnimated:YES completion:nil];

【问题讨论】:

    标签: objective-c uitableview uiviewcontroller modalviewcontroller uimodalpresentationstyle


    【解决方案1】:

    你可以使用关闭块

    [self dismissViewControllerAnimated:YES 完成:^{

            <do something on completion here>
    
        }];
    

    【讨论】:

      【解决方案2】:

      要返回 UIImage,请在 ViewControllerA 中执行以下操作:

      override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
          let viewControllerB = segue.destinationViewController as! ViewControllerB
          viewControllerB.callback = { message in
              //Do what you want in here!
          }
      }
      

      在 ViewControllerB 中:

      var callback : (String -> Void)?
      @IBAction func done(sender: AnyObject) {
          callback?("Hi")
          self.dismissViewControllerAnimated(true, completion: nil)
      }
      

      【讨论】:

      • 我可以通过第二个视图控制器的委托方法传递任何数据。之后我调用 [_tableView reloadData] 方法。但是我的 tableview 没有重新加载。它根本不更新表格视图。我该怎么办?
      • reloadData 在哪里调用?
      • 我通过实现第二个视图控制器委托方法在第一个视图控制器中调用重新加载数据
      • 更好的方法是让 UIViewController 通过在 TableView 的控制器中声明的 Unwind Segue 被解除,prepare(for: segue:) 被编程为将 UIImageView 的引用传递给 Unwind 中的另一个继续。避免委托。
      • 是的,我通过几种方式解决了这个问题。只需使用委托来获取图像值并将委托设置在创建第二个类实例并以模态方式呈现的位置。在那里使用 classinstance.delegate = self.然后呈现视图控制器。
      猜你喜欢
      • 2021-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多