7

我有一个像这样的 UITabBarItem :

_Controller.tabBarItem = [[UITabBarItem alloc] initWithTitle:nil image:nil tag:0];

但是标题为 nil 会删除可访问性和 KIF 测试所需的标签。我发现的另一种方法是设置标题并将其移出屏幕,但这似乎是一个 hacky 解决方案:

_Controller.tabBarItem.title = @"Foo";
_Controller.tabBarItem.titlePositionAdjustment = UIOffsetMake(0, 200);

是否可以有一个没有标题的 UITabBarItem,但仍然有一个可访问性标签?

编辑为标签栏和背景按钮代码添加完整代码:

- (void) loadViewController {
    _Controller = [[UIViewController alloc] init];
    UIImage *normalImage = [UIImage imageNamed:@"bar.png"];
    UIImage *selectedTabImage = [UIImage imageNamed:@"barHover.png"];
    [self addCenterButtonWithImage:normalImage
                    highlightImage:selectedTabImage];

    _Controller.tabBarItem = [[UITabBarItem alloc] initWithTitle:nil image:nil tag:0];
}

// Create a custom UIButton and add it to the center of our tab bar
-(void) addCenterButtonWithImage:(UIImage*)buttonImage highlightImage:(UIImage*)highlightImage
{
    UIButton* button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.frame = CGRectMake(0.0, 0.0, buttonImage.size.width, buttonImage.size.height);
    [button setBackgroundImage:buttonImage forState:UIControlStateNormal];
    [button setBackgroundImage:highlightImage forState:UIControlStateHighlighted];
    [button addTarget:self action:@selector(openCamera) forControlEvents:UIControlEventTouchUpInside];

    button.center = CGPointMake(self.tabBar.frame.size.width/2.0, self.tabBar.frame.size.height/2.0 - 6.0);

    [self.tabBar addSubview:button];
}
4

2 回答 2

10

在 iOS8 中,您可以直接为标签栏项目分配辅助功能标签:

_Controller.tabBarItem = [[UITabBarItem alloc] initWithTitle:nil image:nil tag:0];
_Controller.tabBarItem.accessibilityLabel = @"Foo";

对于 iOS7 及以下版本,您需要做一些事情来隐藏文本是对的。您可以像图示的那样强制它离开屏幕:

_Controller.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"Foo" image:nil tag:0];
_Controller.tabBarItem.titlePositionAdjustment = UIOffsetMake(0, 200);

或者您可以使文本颜色清晰:

_Controller.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"Foo" image:nil tag:0];
[_Controller.tabBarItem setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor clearColor]} forState:UIControlStateNormal];

请记住,无论您采用何种解决方案,视障用户都会使用它来导航您的应用程序。由于您的背景按钮是一个无法使用的装饰,您应该这样标记它:

button.isAccessibilityElement = NO;
button.userInteractionEnabled = NO;
于 2014-10-14T19:09:38.613 回答
5

如果您尝试在 UITabBarItem 上设置 accessibilityIdentifier,除非您将isAccessibilityElement属性更新为 true ,否则它不会显示在 Accessibility Identifier中:

例子:

self.navigationController?.tabBarItem.isAccessibilityElement = true
self.navigationController?.tabBarItem.accessibilityIdentifier = "SomeIdName"
于 2018-03-22T20:34:58.970 回答