我正在使用iOS (仅使用代码,不使用故事板)开发一个Xamarin.iOS应用程序,当我从导航控制器弹出时,我想知道向原始uiview控制器发送数据的最佳方法是什么。
在安卓系统中,我使用StartActivityForResult,然后重写OnResult,但是对于iOS,我找不到类似的方法。
我知道ViewDidLoad,ViewDidAppear等都有越权,我要找的是某种ViewDidGetPoppedBackTo (希望你能得到)。
或者还有其他更好的方法来实现这一点?
发布于 2017-11-21 09:27:08
NavigationController将所有ViewControllers作为数组进行跟踪:NavigationController.ViewControllers
您可以通过以下代码从该数组中获取ViewController类型的现有实例:(如果有此方法,可以用BaseViewController编写该方法)。
public T InstanceFromNavigationStack<T> () where T : UIViewController
{
return (T)NavigationController.ViewControllers.FirstOrDefault(v => v is T);
}然后像这样使用它:
var myVCInstance = InstanceFromNavigationStack<MyTargetViewController>();
if(myVCInstance != null)
{
//Assign a value like
myVCInstance.MyVariable = "MyValue";
//Or call a method like
myVCInstance.MethodToReloadView("MyValue")
}
//Go Back Navigation Code
//Then here write your navigation logic to go back.这不仅有助于在以前的ViewController中传递数据,而且有助于在堆栈中传递任何ViewController。只需传递它的类型就可以从Stack获得一个实例。
注意:如果导航堆栈没有相同ViewController类型的多个实例,那么应该可以工作。
发布于 2017-11-22 04:20:03
用这种方式
ViewController viewController = (ViewController)NavigationController.TopViewController;
viewController.SendData(myevent);在您的SendData中创建方法ToViewController,当导航返回并将数据发送到以前的ViewController时,首先调用该方法。
发布于 2017-11-23 13:21:37
我已经开始使用的另一个选项是EventHandler方法。下面是一个示例,用于使用从UITextField (子视图控制器)中选择的内容填充父视图控制器中的UITableView,然后关闭子视图控制器。
在父视图控制器中定义EventHandler方法:
void LocationLookup_OnSelected(object sender, EventArgs e)
{
chosenLocation = (MKPlacemark)sender;
planLocation.Text = chosenLocation.Name;
this.ParentViewController.DismissViewController(true, null);
}将父类的EventHandler方法作为子属性传递。
public partial class LocationLookupViewController : UITableViewController
{
private event EventHandler OnSelected;
public LocationLookupViewController(EventHandler OnSelected)
{
this.OnSelected = OnSelected;
}
...
}调用传入父级中需要的对象/数据的EventHandler
public override void RowSelected(UITableView tableView, NSIndexPath indexPath)
{
...
OnSelected(response?.MapItems[0].Placemark, new EventArgs());
}注:上面的类和函数是不完整的,但是应该为您提供关于这种技术是如何工作的概念。
https://stackoverflow.com/questions/47407724
复制相似问题