2

右側と左側に2つのバーボタンアイテムを設定しました。右側のビューは2つのビュー間で正常に変更され、右側の2番目のビューはセグメント化されたコントロールであり、賢明なように2つのビュー間で変更されることになっています。これが私のコードです。セグメント化されたコントロールを使用してビューの変更を実装する方法を知りたいです。

- (void)setupNavigationBar {
    UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0,  self.view.frame.size.width, 44.0f)];
    UINavigationItem *navItem = [[UINavigationItem alloc] initWithTitle:@"ContainerView"];
    navItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFastForward target:self action:@selector(switchViewControllers)];
    navBar.items = [NSArray arrayWithObject:navItem];
    segmented = [[UISegmentedControl alloc] initWithItems:
                                  [NSArray arrayWithObjects:
                                   [UIImage imageNamed:@"seg1.png"],
                                   [UIImage imageNamed:@"seg1.png"],
                                   nil]];
    segmented.frame = CGRectMake(0, 0, 50, 30);

    segmented.segmentedControlStyle = UISegmentedControlStyleBar;

    UIBarButtonItem * segmentedBarItem = [[UIBarButtonItem alloc]  initWithCustomView:segmented];
    navItem.leftBarButtonItem = segmentedBarItem;

    [self.view addSubview:navBar];
}

- (void)viewDidLoad {
    [super viewDidLoad];

    // This is just for the purpose of calling the switch method.
    [self setupNavigationBar];

    CGRect rect = CGRectMake(0, 44, 320, 436);

    currentViewController = [[FirstViewController alloc] init];
    currentViewController.view.frame = rect;

    nextViewController = [[SecondViewController alloc] init];
    nextViewController.view.frame = rect;

    [self addChildViewController:currentViewController];
    [self addChildViewController:nextViewController];

    [self.view addSubview:currentViewController.view];
}

- (void)switchViewControllers {
    [self transitionFromViewController:currentViewController toViewController:nextViewController duration:3.0 options:UIViewAnimationTransitionFlipFromRight | UIViewAnimationOptionCurveEaseInOut animations:nil completion:^(BOOL finished) {
        UIViewController *tempViewController = currentViewController;
        currentViewController = nextViewController;
        nextViewController = tempViewController;
        tempViewController = nil;
    }];
}

ビューを変更するためにセグメント化されたコントロールをどのように実装しますか?

4

2 に答える 2

1

アドオンUISegmentedControlUINavigationBar

編集 :

NSArray *itemArray = [NSArray arrayWithObjects:
                      [UIImage imageNamed:@"1.png"],
                      [UIImage imageNamed:@"2.png"],
                      nil];

UISegmentedControl* menuSegmentedButton = [[UISegmentedControl alloc] initWithItems:itemArray];
menuSegmentedButton.momentary = YES;
menuSegmentedButton.selected = NO;
menuSegmentedButton.segmentedControlStyle = UISegmentedControlStyleBar;
   [menuSegmentedButton addTarget:self action:@selector(doMenu)
              forControlEvents:UIControlEventValueChanged];
[menuSegmentedButton sizeToFit];
UIBarButtonItem* barButton = [[UIBarButtonItem alloc]
                              initWithCustomView:menuSegmentedButton];
self.navigationItem.leftBarButtonItem = barButton;

タップされたセグメントボタンにこのメソッドを追加します

-(void)doMenu
{
    /// code for segment button tapped
}
于 2013-02-08T14:42:53.010 に答える
1

パフォーマンスの問題では、2つのサブビューではなく個別のビューコントローラーが必要になる場合がありますが、それははるかに複雑です。非常に複雑なナビゲーションシステムがあり、ビューごとにセグメントコントロールを設定する必要があります。ビューをサブクラス化する別の方法があると確信していますが、これには慣れていないため、ビューを含む1つのビューコントローラーを用意することをお勧めします。

注:各ビューにすべてのオブジェクトをプログラムで作成する場合は、非表示のビューからオブジェクトを削除することで、優れたパフォーマンスを実現できます。

したがって、最初にUISegmentedControlがあります(iPatelの回答で作成されたもの)。しかし、この行に追加します[ctrl addTarget:self action:@selector(switchViewControllers) forControlEvents:UIControlEventValueChanged];

次にswitchViewControllers入れて:

if (ctrl.selectedSegmentIndex == 0) {
    NSLog(@"One");
    self.viewOne.hidden = NO;
    self.viewTwo.hidden = YES;

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:@"showView" forKey:@"viewOne"];
    [defaults synchronize];
}
else if (ctrl.selectedSegmentIndex == 1) {
    NSLog(@"Two");
}

-(void)viewDidLoad {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    if ([[defaults objectForKey:@"showView"] isEqualToString:@"viewOne"]) {
        self.viewOne.hidden = NO;
        self.viewTwo.hidden = YES;
    }
    else if (...) {

    }
}

上記は、セグメントコントロールを切り替えるときに機能するはずです。それぞれifで、2つのビューの表示を切り替えることができます。メインビューのサブビューとしてさまざまなビューを作成します。重ねて。Interface BuilderまたはviewDidLoadのいずれかで1つのビューを非表示にする必要があります(現在のビューをNSUserDefaultsに保存し、ユーザーが最初にView Controllerをロードしたときにそのビューを表示することをお勧めします)。

于 2013-02-08T14:49:45.237 に答える