0

私が持っているすべてのビューに表示する必要があるカスタムメニューがある新しいプロジェクトを開始しようとしています。このメニューはカスタム設計されており、ある時点でアニメーションが追加される可能性があるため、タブバーを使用したくありません.

すべての xib ファイルにビルドする必要がないように、このメニューを 1 か所に作成する簡単な方法はありますか??

ありがとう

4

1 に答える 1

0

タブ バー コントローラーは、システム提供のコンテナー コントローラーです。iOS 5 以降を使用している場合は、独自のカスタム コンテナー ビュー コントローラーを作成できます。


アップデート:

独自のカスタム メニューを作成する場合は、次のようにします。特別なことはしていませんが、カスタム ボタンに対応する 3 つの色付きのサブビューを追加しているだけです。そして、それぞれにタップ ジェスチャ レコグナイザがあります。

NSInteger const kHeight = 50;
NSInteger const kCount = 3;

@interface CustomMenu ()
@property (nonatomic, strong) NSMutableArray *menuViews;
@end

@implementation CustomMenu


- (id)init
{
    self = [super init];
    if (self)
    {
        _menuViews = [[NSMutableArray alloc] init];
        for (NSInteger i = 0; i < kCount; i++)
        {
            UIView *subview = [[UIView alloc] init];
            subview.tag = i;
            [self addSubview:subview];
            [_menuViews addObject:subview];
            UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
            [subview addGestureRecognizer:recognizer];
        }

        [_menuViews[0] setBackgroundColor:[UIColor blueColor]];
        [_menuViews[1] setBackgroundColor:[UIColor redColor]];
        [_menuViews[2] setBackgroundColor:[UIColor greenColor]];
    }
    return self;
}

- (void)layoutSubviews
{
    CGFloat width = self.superview.bounds.size.width;
    CGFloat height = self.superview.bounds.size.height;

    CGFloat menuChoiceWidth = width / kCount;

    self.frame = CGRectMake(0, height - kHeight, width, kHeight);

    NSInteger subviewIndex = 0;

    for (UIView *subview in self.menuViews)
    {
        subview.frame = CGRectMake(subviewIndex * menuChoiceWidth, 0,
                                   menuChoiceWidth, kHeight);
        subviewIndex++;
    }

}
- (void)handleTap:(UITapGestureRecognizer *)recognizer
{
    NSLog(@"%s tapped on %d", __FUNCTION__, recognizer.view.tag);
}

@end

次に、さまざまなビュー コントローラーでビューに を追加する必要がCustomMenuあります。

@interface ViewController ()
@property (nonatomic, strong) CustomMenu *menu;
@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.menu = [[CustomMenu alloc] init];
    [self.view addSubview:self.menu];
}

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    [self.menu layoutSubviews];
}

@end

私は iOS 4.3 のサポートを断念したことを告白します (心痛に値するものではなく、最近の 4.3 の聴衆のサイズはかなり小さいです)。考えられる解決策の 1 つがどのようなものかを感じ取ってください。

于 2012-12-19T20:42:40.643 に答える