7

我在我的 iOS 应用程序中使用适用于 iOS 5.0 及更高版本的 ZBar 条形码阅读器。

我在相机界面上使用以下代码隐藏了信息按钮。

UIView * infoButton= infoButton = [[[[[reader.view.subviews objectAtIndex:1] subviews] objectAtIndex:0] subviews] objectAtIndex:2];
[infoButton setHidden:YES];

但不知何故,这段代码不适用于 iOS6.0 及更高版本。

4

8 回答 8

10

试试这个代码,这在 iOS5.0 及更高版本上对我有用。

float currentVersion = 5.1;
float sysVersion = [[[UIDevice currentDevice] systemVersion] floatValue];

UIView * infoButton;
if (sysVersion > currentVersion)
   infoButton = [[[[[reader.view.subviews objectAtIndex:1] subviews] objectAtIndex:0] subviews] objectAtIndex:3];
else
   infoButton = [[[[[reader.view.subviews objectAtIndex:1] subviews] objectAtIndex:0] subviews] objectAtIndex:2];
[infoButton setHidden:YES];

解释。 在 iOS 6.0 中,如果您打印日志。

NSLog(@"%@",[[[[reader.view.subviews objectAtIndex:1] subviews] objectAtIndex:0] subviews]);

输出。

"<_UIToolbarBackground: 0xa0991c0; frame = (0 0; 320 54); autoresize = W; userInteractionEnabled = NO; layer = <CALayer: 0xa0795e0>>",
"<UIImageView: 0xa05d630; frame = (0 -3; 320 3); opaque = NO; autoresize = W+BM; userInteractionEnabled = NO; layer = <CALayer: 0xa05cfb0>>",
"<UIToolbarTextButton: 0xa0a8cc0; frame = (6 0; 60 54); opaque = NO; layer = <CALayer: 0xa0a9460>>",
"<UIButton: 0xa0960e0; frame = (290 18; 18 19); opaque = NO; layer = <CALayer: 0xa0615a0>>

在 iOS 5.0 中,如果您打印日志。

NSLog(@"%@",[[[[reader.view.subviews objectAtIndex:1] subviews] objectAtIndex:0] subviews]);

输出。

"<_UIToolbarBackground: 0x8d9df90; frame = (0 0; 320 54); userInteractionEnabled = NO; layer = <CALayer: 0x8dc12c0>> - (null)",
"<UIToolbarTextButton: 0x8de5ae0; frame = (6 0; 60 54); opaque = NO; layer = <CALayer: 0x8de5db0>>",
"<UIButton: 0x8d1b110; frame = (290 18; 18 19); opaque = NO; layer = <CALayer: 0x8dba2b0>>"

因此,对于 iOS 6.0 及更高版本,它应该是索引 3 处的对象,因为有一个额外的视图 UIImageView

于 2013-05-03T07:10:14.547 回答
6

在 ZBar 的最后一个版本中,我用另一条路径解决了这个问题:

UIView * infoButton = [[[[[reader.view.subviews objectAtIndex:2] subviews] objectAtIndex:0] subviews] objectAtIndex:3];

[infoButton setHidden:YES];

数组键更改为 [2] [0] [3]

于 2013-09-18T12:15:23.720 回答
3

试试这个代码:

UIView * infoButton = [[[[[reader.view.subviews objectAtIndex:1] subviews] objectAtIndex:0] subviews] objectAtIndex:3];

[infoButton setHidden:YES];
于 2013-05-03T07:13:42.693 回答
2

对我来说,按钮的路径有点不同,所以这是我的解决方案:

获取按钮:

UIButton *cancelButton = [[[[[reader.view.subviews objectAtIndex:2] subviews] objectAtIndex:0] subviews] objectAtIndex:2] subviews] objectAtIndex:0];

并隐藏它:

[cancelButton setHidden:YES];

或者用这个按钮做任何事情,我需要翻译它:

[cancelButton setTitle:@"キャンセル" forState:UIControlStateNormal];
于 2013-08-06T02:16:36.400 回答
2

另一个黑客。

我不想只依赖视图和子视图索引,很容易被改变。
因此,我访问了插入信息按钮的工具栏,并删除了相应的UIBarButtonItem.

创建 ZBarReaderViewController 的子类:

@interface ZBarReaderViewControllerWithoutInfoButton : ZBarReaderViewController

@end

@implementation ZBarReaderViewControllerWithoutInfoButton


- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    // Accessing the toolbar
    UIToolbar *toolbar = [[controls subviews] firstObject];

    // Only keeping the first two items of the toolbar, thus deleting the info button
    if ([toolbar isKindOfClass:UIToolbar.class]) {
        toolbar.items = @[ toolbar.items[0], toolbar.items[1] ];
    }
}

@end

在呈现扫描仪视图控制器时不要忘记实例化这个新的子类([ZBarReaderViewControllerWithoutInfoButton new]而不是“[ZBarReaderViewController new]”)。


前:

之前,带有信息按钮

后:

之后,没有信息按钮

于 2014-08-22T13:00:21.837 回答
2

新设备的新解决方案,如在 iOS10 中,此按钮为 2 而不是 index3,这是应用了之前解决方案的代码。

float currentVersion = 5.1;
float sysVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
UIView * infoButton;

if (sysVersion > currentVersion && sysVersion < 10 )
   infoButton = [[[[[self.scanReader.view.subviews objectAtIndex:2] subviews] objectAtIndex:0] subviews] objectAtIndex:3];
else
   infoButton = [[[[[self.scanReader.view.subviews objectAtIndex:2] subviews] objectAtIndex:0] subviews] objectAtIndex:1];

[infoButton setHidden:YES];

希望它有帮助,问候

于 2016-09-27T13:24:41.807 回答
1

不是您要求的,而是要删除屏幕底部的整个栏,您可以使用

reader.showsZBarControls = NO;
于 2014-04-08T10:35:16.577 回答
0

这是工作代码块。

float currentVersion = 5.1;
float sysVersion = [[[UIDevice currentDevice] systemVersion] floatValue];

UIView * infoButton;

if (sysVersion > currentVersion && sysVersion < 10 )
    infoButton = [[[[[codeReader.view.subviews objectAtIndex:1] subviews] objectAtIndex:0] subviews] objectAtIndex:3];
else
    infoButton = [[[[[codeReader.view.subviews objectAtIndex:1] subviews] objectAtIndex:0] subviews] objectAtIndex:1];

[infoButton setHidden:YES];
于 2016-10-27T17:29:42.357 回答