Изменение видов из UISegmentedControl - PullRequest
1 голос
/ 13 октября 2009

У меня есть наилучший тип вопросов, касающихся Nibs и UISegmentedControls.

У меня есть файл пера, который содержит UISegmentedControl с 3 кнопками. Каждый из которых при переключении отображает другой вид в основной части окна.

Все работает нормально, но я подозреваю, что мой подход ошибочен, и мне было интересно, может ли кто-нибудь подсказать, как я "должен" это сделать.

В настоящее время в NIB у меня есть 3 UIViews, которые накладываются друг на друга, а затем в файле .m я изменяю каждый UIViews. Скрытый, чтобы скрыть и показать тот, который мне интересен.

- (IBAction)segmentAction:(id)sender
{
    if([sender selectedSegmentIndex] == 0)
    {
        [self.view1 setHidden:NO];
        [self.view2 setHidden:YES];
        [self.view3 setHidden:YES];
    }
    else if([sender selectedSegmentIndex] == 1)
    {
        [self.view1 setHidden:YES];
        [self.view2 setHidden:NO];
        [self.view3 setHidden:YES];
    }
    else if([sender selectedSegmentIndex] == 2)
    {
        [self.view1 setHidden:YES];
        [self.view2 setHidden:YES];
        [self.view3 setHidden:NO];
    }
}

Все «работает», но перьевый файл не так легко редактировать, так как вы не можете легко «отключить» другие UIViews, поэтому я неизменно выбираю неправильный элемент на холсте. Также IB жалуется, что: «Это представление перекрывает одного из его братьев и сестер» в информационном диалоговом окне.

Какой подход я должен использовать, учитывая, что я хотел бы, чтобы все представления были изложены в InterfaceBuilder. Должен ли я иметь 4 файла пера? Если да, то как мне их загружать при нажатии сегмента Control? Любой пример кода, на который вы можете направить меня?

спасибо

Ответы [ 2 ]

2 голосов
/ 13 октября 2009

от макушки головы, вот пара вещей, которые вы можете попробовать:

1) создать 3 отдельных объекта UIView в IB, но не добавлять их в иерархию представлений

Предполагая, что у вас есть контроллер представления, в котором содержатся все три представления, вы можете в IB создать 3 представления, перетащив каждое представление из библиотеки в окно с названием YourNib.nib или YourXib.xib. Так что не перетаскивайте представления в главное представление контроллера представления.

Теперь вы можете дважды щелкнуть каждый из них и редактировать их самостоятельно, без необходимости выбирать различные виды, потому что они перекрываются (потому что это не так)

на вкладке соединений, подключите свойство view контроллера представления к одному из представлений.

устанавливает значение по умолчанию.

Теперь в вашем коде вы можете изменить, к какому виду подключено:

[myViewController setView: view2];

и перезагрузите представления.

2) создайте один действительно высокий вид (или действительно широкий вид) и измените y-позицию вида по отношению к рамке родительского вида, когда вы нажимаете кнопку сегментированного вида, чтобы пользователю казалось, что они ' мы собираемся на отдельные страницы

это позволяет легко анимировать и переходить между "представлениями". хотя будет использовать больше памяти, потому что у вас загружены все элементы, даже когда они не видны. но ты все равно это делал.

1 голос
/ 13 октября 2009

Это будет работать так, как есть, но вы правы, что это не идеально. Без какого-либо контекста наиболее естественным способом реализации этого был бы UITabBarController, управляющий тремя UIViewController, каждый со своим собственным представлением. Вы получите выгоду от всех обратных вызовов при переключении представлений (viewWill / DidAppear, viewWill / DidDisappear и т. Д.) + Вам будет легче разделять файлы пера. Обратные вызовы могут быть очень полезны для загрузки / перезагрузки данных в соответствующее время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...