monotouch - установить текущий вид

У меня есть элемент управления 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);
        }
    } 

Но это делает приложение непредсказуемым, предположительно, потому что я постоянно накапливаю просмотры?

Пожалуйста помоги.

Джейсон


person jason clark    schedule 25.02.2011    source источник


Ответы (2)


Использование метода 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;     
} 

Я не запускал код, но он должен работать. Надеюсь это поможет.

person Eduardo Scoz    schedule 26.02.2011

Это может помочь. переключение между контроллерами uiview без элемента управления навигатора пользовательского интерфейса

но для переключения не требуется пользовательский интерфейс, вызовите приложение deletegate из вашего контроллера представления с помощью чего-то вроде

var appDelegate = (AppDelegate) UIApplication.SharedApplication.Delegate;              
appDelegate.switch();
person angel of code    schedule 12.05.2011