我已经在圈子里走了几个小时。我有一个Xamarin故事板应用程序,我有一个容器视图,我嵌入了一个拆分视图控制器。我试图根据表上的用户选择更改详细信息视图。在我的表ViewController中,我有:
public override void ViewDidLoad()
{
base.ViewDidLoad ();
string[] tableItems = new string[] {"Vegetables","Fruits","Flower Buds","Legumes","Bulbs","Tubers"};
this.TableView.Source = new TableSource (tableItems, this);
this.TableView.AllowsSelection = true;
this.TableView.ReloadData();
}
然后在我的表源代码中,我有以下内容应该更改细节。请注意,viewController1
是表视图控制器,在设置源时传递给它。
public override void RowSelected (UITableView tableView, NSIndexPath indexPath)
{
new UIAlertView("Row Selected", tableItems[indexPath.Row], null, "OK", null).Show();
tableView.DeselectRow (indexPath, true); // iOS convention is to remove the highlight
viewController1.ParentViewController.PerformSegue("DetailSegue", viewController1.ParentViewController);
}
我已经从我的拆分视图控制器创建了一个segue到我的详细视图控制器,名为DetailSegue,这就是我所说的。这种错误,但无论如何我不认为调用segue是正确的方法。
我也尝试过:
viewController1.ParentViewController[1] = new TestDetailViewController();
但是当我使用storyboard时,TestDetailViewController
方法需要intPtr句柄,我不知道如何引用它。拆分视图控制器的Xamarin配方不使用故事板,我找不到正确的方法。
答案 0 :(得分:0)
你可能会尝试修改导航控制器的堆栈......就像这样(用有限的Xamarin知识翻译)......
public override void RowSelected (UITableView tableView, NSIndexPath indexPath) {
UINavigationController navController = self.splitViewController.viewControllers.lastObject;
NSArray newStack = new NSArray.arrayWithObjects(newController, nil);
navController.setViewControllers(newStack);
}
再一次,我在.NET上生锈了......这是我翻译的Objective-C ......
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UINavigationController *navController = [[[self splitViewController] viewControllers] lastObject]
NSArray *newStack = [NSArray arrayWithObjects:newController, nil ];
[navController setViewControllers:newStack];
}
来源:http://www.dharmaworks.net/Consulting/switching-detail-views-in-uisplitviewcontroller-with-ios7