ViewController 继续 Xamarin
ViewController Segue Xamarin
我想实现我在 iOS 中已经完成的相同功能。我首先通过 Ctrl-click
和 drag
在 viewcontroller to viewcontroller
之间创建 segue,然后我使用 segue identifier
到达 destinationviewcontroller
。
但是,在 Xamarin 中,如果没有按钮,则无法使用 Ctrl-click
和 drag
添加 segue。我想知道有没有办法实现 native iOS
提供的相同功能?
我遵循了以下教程,但它基于 button segue
,而不是 viewcontroller to viewcontroller segue
。 http://developer.xamarin.com/guides/ios/user_interface/introduction_to_storyboards/
Xamarin
public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
{
UIStoryboard board = UIStoryboard.FromName ("MainStoryboard", null);
SecondViewController sVC = (SecondViewController)board.InstantiateViewController ("SecondViewController");
ctrl.ModalTransitionStyle = UIModalTransitionStyle.CoverVertical;
iv.PresentViewController(sVC,true,null);
}
// 在 iOS 代码中
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self performSegueWithIdentifier:@"isDetail" sender:self];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"isDetail"]) {
SecondViewController *fVC = [segue destinationViewController];
}
}
您可以通过 Ctrl-Click
ing 和 dragging
从源视图控制器底部的灰色区域到第二个视图控制器(见图),在两个视图控制器之间添加一个 segue。可以像故事板表面上的任何其他控件一样在属性窗格中编辑 segue 的属性(例如过渡样式)。
当你想使用segue时,很简单:
PerformSegue ("detailSegue", this);
其中 detailSegue
是情节提要中设置的 segue 标识符。然后在 PrepareForSegue
中进行初始化:
public override void PrepareForSegue (UIStoryboardSegue segue, NSObject sender)
{
if (segue.Identifier == "detailSegue") {
SecondViewController = segue.DestinationViewController;
// do your initialisation here
}
}
据推测,(查看您的示例代码)您希望目标视图控制器的初始化依赖于在 table 视图中选择的行。为此,您可以向视图控制器添加一个字段以保存所选行,或者 "abuse" PerformSegue 的 sender
参数以通过 NSIndexPath 传递:
public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
{
this.PerformSegue ("detailSegue", indexPath); // pass indexPath as sender
}
然后:
public override void PrepareForSegue (UIStoryboardSegue segue, NSObject sender)
{
var indexPath = (NSIndexPath)sender; // this was the selected row
// rest of PrepareForSegue here
}
我想实现我在 iOS 中已经完成的相同功能。我首先通过 Ctrl-click
和 drag
在 viewcontroller to viewcontroller
之间创建 segue,然后我使用 segue identifier
到达 destinationviewcontroller
。
但是,在 Xamarin 中,如果没有按钮,则无法使用 Ctrl-click
和 drag
添加 segue。我想知道有没有办法实现 native iOS
提供的相同功能?
我遵循了以下教程,但它基于 button segue
,而不是 viewcontroller to viewcontroller segue
。 http://developer.xamarin.com/guides/ios/user_interface/introduction_to_storyboards/
Xamarin
public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
{
UIStoryboard board = UIStoryboard.FromName ("MainStoryboard", null);
SecondViewController sVC = (SecondViewController)board.InstantiateViewController ("SecondViewController");
ctrl.ModalTransitionStyle = UIModalTransitionStyle.CoverVertical;
iv.PresentViewController(sVC,true,null);
}
// 在 iOS 代码中
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self performSegueWithIdentifier:@"isDetail" sender:self];
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"isDetail"]) {
SecondViewController *fVC = [segue destinationViewController];
}
}
您可以通过 Ctrl-Click
ing 和 dragging
从源视图控制器底部的灰色区域到第二个视图控制器(见图),在两个视图控制器之间添加一个 segue。可以像故事板表面上的任何其他控件一样在属性窗格中编辑 segue 的属性(例如过渡样式)。
当你想使用segue时,很简单:
PerformSegue ("detailSegue", this);
其中 detailSegue
是情节提要中设置的 segue 标识符。然后在 PrepareForSegue
中进行初始化:
public override void PrepareForSegue (UIStoryboardSegue segue, NSObject sender)
{
if (segue.Identifier == "detailSegue") {
SecondViewController = segue.DestinationViewController;
// do your initialisation here
}
}
据推测,(查看您的示例代码)您希望目标视图控制器的初始化依赖于在 table 视图中选择的行。为此,您可以向视图控制器添加一个字段以保存所选行,或者 "abuse" PerformSegue 的 sender
参数以通过 NSIndexPath 传递:
public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
{
this.PerformSegue ("detailSegue", indexPath); // pass indexPath as sender
}
然后:
public override void PrepareForSegue (UIStoryboardSegue segue, NSObject sender)
{
var indexPath = (NSIndexPath)sender; // this was the selected row
// rest of PrepareForSegue here
}