Переключение между представлениями в 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];
Другие вопросы по тегам