2012年3月25日日曜日

文字表示だけのUITabBarItem


UITabBarItemはアイコン表示が主体で文字は補助的なため、フォントサイズが小さく、またアイコンがない場合はボタンの下側に表示されるため情けない状態になります。
文字表示だけのUITabBarItemを使う場合は、少々コーディングが必要になります。
3つボタンの場合の例です。

//UIViewController(またはそのサブクラス)

@property (weak, nonatomic) IBOutlet UITabBar *tabBar;

- (void)loadView
{
    [super loadView];
    ...
    UITabBarItem *item1 = [[UITabBarItem alloc] initWithTitle:@"タブ1" image:nil tag:1];
    UITabBarItem *item2 = [[UITabBarItem alloc] initWithTitle:@"タブ2" image:nil tag:2];
    UITabBarItem *item3 = [[UITabBarItem alloc] initWithTitle:@"タブ3" image:nil tag:3];
 
    NSMutableDictionary *attrDict
        = [NSMutableDictionary dictionaryWithObject:[UIFont boldSystemFontOfSize:18.0]
                                             forKey:(id)aKey:UITextAttributeFont];

    [item1 setTitleTextAttributes:attrDict forState:UIControlStateNormal];
    [item2 setTitleTextAttributes:attrDict forState:UIControlStateNormal];
    [item3 setTitleTextAttributes:attrDict forState:UIControlStateNormal];

    UIOffset offset1 = UIOffsetMake(item1.titlePositionAdjustment.horizontal, -11.0);
    UIOffset offset2 = UIOffsetMake(item2.titlePositionAdjustment.horizontal, -11.0);
    UIOffset offset3 = UIOffsetMake(item3.titlePositionAdjustment.horizontal, -11.0);

    [item1 setTitlePositionAdjustment:offset1];
    [item2 setTitlePositionAdjustment:offset2];
    [item3 setTitlePositionAdjustment:offset3];

    tabBar.items = [NSArray arrayWithObjects:item1, item2, item3, nil];
    tabBar.delegate = self;
}

#pragma mark - UITabBarDelegate method

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
{
    [self saveUserDefaults];
    switch(item.tag) {
        case 1: ...; break;
        case 2: ...; break;
        case 3: ...; break;
    }
}

--------------------------------------------------------------

予めstoryboardでタイトルを設定してある場合は、次の要領で属性だけ変更することができます。

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.delegate = self;
    [self.navigationItem setRightBarButtonItem:nil animated:NO];

    UIOffset os1 = UIOffsetMake(0, -11.0);
    float fontSize = 16.0;
    UIFont *font = [UIFont boldSystemFontOfSize:fontSize];
    NSDictionary *attrDict = [NSDictionary dictionaryWithObject:font
                                                                  forKey:UITextAttributeFont];
    
    for(UITabBarItem *tabBarItem in self.tabBar.items) {
        [tabBarItem setTitleTextAttributes:attrDict forState:UIControlStateNormal];
        [tabBarItem setTitlePositionAdjustment:os1];
    }

}

0 件のコメント: