Изменение видов из UISegmentedControl

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

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

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

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

- (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 файла пера? Если это так, как я должен загрузить их, когда сегмента ControlControl? Любой пример кода вы можете направить меня?

Спасибо

13.10.2009 12:04:26
2 ОТВЕТА
РЕШЕНИЕ

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

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

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

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

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

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

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

[myViewController setView: view2];

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

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

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

2
13.10.2009 17:18:02
Можете ли вы уточнить, что вы подразумеваете под make 3 separate UIView objects but don't add them to the view hierarchy. И что вы подразумеваете под create the 3 views by dragging each view from the library to the window titled YourNib.nib or YourXib.xib.
Adam Johns 18.11.2014 15:33:20

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

1
13.10.2009 16:15:30