将数据传递到另一个视图控制器而不更改视图(Swift)

时间:2017-04-04 09:59:35

标签: ios swift uitableview

我有一个searchViewController,我搜索用户,UITableView动态更新用户信息。 UITableView的单元格是自定义的 - 它有一个UIImage,usernameLabel和一个名为" Add"的按钮。

我想要的是,如果用户点击单元格的添加按钮,它应该将该单元格上的用户信息(图像和用户名)传递给另一个具有UITableView作为朋友列表的视图控制器。

然而,到目前为止,我所知道的唯一方法是使用performSegue将数据传递给另一个持有友元列表UITable的viewController。但是通过这种方法,每次我点击添加按钮时,它都会切换到我不想要的另一个视图控制器。我希望它在单击添加按钮时保持在searchViewController上 - 我只希望传递数据。

我有什么方法可以做到这一点?是否建议使用NSUserDefaults传递此类数据?

4 个答案:

答案 0 :(得分:0)

为简单起见,我将使用FriendListVC和AddVC

如果您通过条形按钮项目或其他东西从FriendListVC转到您的AddVC,您的堆栈如下: -

FriendListVC - > AddVC

您可以使用两种方法: -

1)在你的addVC中创建你的friendListVC的委托,并在任何变化上修改friendListVC数据源

2)或者,我推荐这种方法,只需在它的viewWillAppear上重新加载你的FriendListVC数据源。即使您向后导航,也会调用viewWillAppear。因此,即使您将来添加deleteVC并导航回来,viewWillAppear也会执行更新,它将独立于任何其他VC

希望有所帮助

答案 1 :(得分:0)

使用delegate在视图控制器之间传递数据。你会发现这很有用 Passing data between 2 UIViewController using delegate and protocol 你可以使用NSUserDefaults,但委托模式比这更好。

答案 2 :(得分:0)

您可以使用回调方法将一个控制器的数据传递到另一个控制器的最佳和简便方法

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 search(sender: AnyObject) {
    callback?("Pass data to view controller1")
    self.dismissViewControllerAnimated(true, completion: nil)
}

答案 3 :(得分:0)

执行此操作的最简单方法是在当前视图控制器中创建要将数据传递到的视图控制器的实例。我会为你写一个示例代码。

class yourTableViewController: UITableViewController {
  var controllerToPassData: UIViewController()

  func clickTableButton(sender: UIButton) {
    controllerToPassData.count += 1
  }
}

class controllerwhereDataisPassed: UIViewController {
  var count: Int!
}

从navigationController堆栈中选择要将数据传递到的控制器实例并使用此代码。