monotouch - 设置当前视图

时间:2011-02-25 21:30:02

标签: xamarin.ios

我有一个UISegmented控件,作为选项卡。 单击选项卡时,我想将视图更改为另一个页面。

基本上目前我有两个视图,每个视图都有自己的段控制,从一个视图切换到另一个视图,反之亦然。

如果我使用PresentModalViewController,每次用户更改uiSegment时,我都会不断地将视图添加到堆栈中。

我想将当前视图设置为新视图。 但同时要确保如果我打电话给我,我可以回复一个观点 我的应用程序是这样的结构:

[主窗口] - > [VC显示项目表] - >

                                   |--> [VC with Segment control  View 1]

                                   | (swap between)

                                   |--> [VC with Segment control  View 2]

所以在我的两个视图中都有例如:

视图1:

partial void Tabs_Changed (UISegmentedControl sender)
    {
        if( btnTabs.SelectedSegment == 1) {
            View2 view2 = new View2(); //load view 2
            this.PresentModalViewController(view2,false);
        }
    } 

观看2:

partial void Tabs_Changed (UISegmentedControl sender)
    {
        if( btnTabs.SelectedSegment == 0) {
            View1 view1 = new View1(); //load view 1
            this.PresentModalViewController(view1,false);
        }
    } 

但这会让应用变得无法预测,可能是因为我不断堆积观点?

请帮忙。

杰森

2 个答案:

答案 0 :(得分:0)

使用PresentModalViewController()方法真的不是一种方法。你确实堆叠了多个视图,这是一件坏事。

我要做的是拥有一个视图,使用UISegmentedControl并添加另外两个子视图(使用AddSubview(View)方法来执行此操作)。

在viewDidLoad方法上,使用以下命令创建视图并隐藏第二个视图:

view1 = new UIView(){BackgroundColor = UIColor.Green}; 
view2 = new UIView(){Hidden = true, BackgroundColor = UIColor.Red};
this.AddSubview(view1);
this.AddSubview(view2);

现在,在您的方法中:

partial void Tabs_Changed (UISegmentedControl sender)
{
   bool v1Visible = btnTabs.SelectedSegment == 0);
   view1.Hidden = !v1Visible;
   view2.Hidden = v1Visible;     
} 

我没有运行代码,但应该可以运行。希望这会有所帮助。

答案 1 :(得分:0)

这可能会有所帮助。 switching between uiviewcontrollers without a UI navigator control

但不需要切换UI,从viewcontroller调用App deletegate

之类的东西
var appDelegate = (AppDelegate) UIApplication.SharedApplication.Delegate;              
appDelegate.switch();