Переключение между представлениями в ios с использованием сегментированного управления
Друзья,
Мне нужно переключиться между четырьмя-пятью видами с разных заголовков
Есть четыре вида Пример Настройки Соединения Открытые сделки Закрытые сделки
Это заголовки, по которым я хочу перемещаться между четырьмя страницами, на которых я нажимаю
Например, я хочу переключиться в представление настроек, когда я нажимаю на него так же, как и во всех других видах, но эти кнопки должны быть во всех видах.
но мне нужны эти кнопки только в одном представлении. Пока я выбираю, следует переключиться на другие виды
2 ответа
В зависимости от того, насколько требователен контент для четырех представлений, я бы предложил создать одно основное представление для сегментированного элемента управления и настроить четыре представления контейнера в главном представлении. Три из них должны быть скрыты, и тогда вы можете переключаться между четырьмя видами (показать / скрыть).
Это только хорошее решение, если коды представлений очень "мягкие" или будет слишком медленно запускать 4-5 представлений одновременно. Если это четыре хардкорных представления, я бы предпочел вместо этого использовать стандартный элемент управления панели вкладок навигации.
//////// ПРИМЕР ////////
Настройка будет с одним UIViewController для фона. В этом представлении мы разместим один UISegmentedControl + четыре представления контейнера. Четыре вида контейнера должны быть расположены друг над другом. Три вида контейнера скрыты, поэтому вы видите только один.
BackgroundViewController.h:
#import <UIKit/UIKit.h>
@interface BackgroundViewController : UIViewController {
IBOutlet UISegmentedControl *segmentedControl;
UIView actualView;
}
@property (nonatomic, weak) IBOutlet UIView *containerOne;
@property (nonatomic, weak) IBOutlet UIView *containerTwo;
@property (nonatomic, weak) IBOutlet UIView *containerThree;
@property (nonatomic, weak) IBOutlet UIView *containerFour;
@end
Вот пример IBAction для сегментированного управления.
- (void) viewDidLoad {
actualView = self.containerOne;
UIView *fromView = nil;
UIView *toView = nil;
self.containerOne.hidden = NO;
self.containerTwo.hidden = YES;
self.containerThree.hidden = YES;
self.containerFour.hidden = YES;
}
- (IBAction)segmentSwitchClick {
NSInteger selectedSegment = segmentedControl.selectedSegmentIndex;
UIView *fromView = actualView;
UIView *toView = nil;
switch (selectedSegment) {
case 0: {
toView = [self containerOne];
break;
}
case 1: {
toView = [self containerTwo];
break;
}
case 2: {
toView = [self containerThree];
break;
}
case 3: {
toView = [self containerFour];
break;
}
default:
break;
}
}
[UIView transitionFromView:fromView toView:toView duration:1.9 options:UIViewAnimationOptionShowHideTransitionViews | UIViewAnimationOptionCurveLinear
completion:^(BOOL finished) {
if (finished) {
actualView = toView;
}
}];
}
PS Я не пробовал, но это должно работать.
Добавить сегментированный элемент управления в главном представлении содержимого. Затем добавьте другие представления в качестве подпредставлений под сегментированным элементом управления. (Установите рамку подпредставлений, чтобы представления не перекрывали сегментированный элемент управления). Затем установите IBOutlet для каждого подпредставления. В действии метод для сегментированного элемента управления показывает и скрывает подпредставления на основе сегментированного элемента управления выбранного индекса. Когда вам нужно показать вид, скрыть другие вложенные виды.
Это простое прямое решение
Ниже приведен пример кода для добавления 3 представлений в суперпредставление viewcontroller (не тестировалось)
CGRect frame = CGRectMake(x, y, width, height); // Replacing with your dimensions
UIView *view1 = [[UIView alloc] initWithFrame:frame];
UIView *view2 = [[UIView alloc] initWithFrame:frame];
UIView *view3 = [[UIView alloc] initWithFrame:frame];
Then, you want to actually add it to the superview (assuming the view is self.view)
[self.view addSubview:view1];
[self.view addSubview:view2];
[self.view addSubview:view3];