【问题标题】:How to test BarButtonItem is connected to right IBAction?如何测试 BarButtonItem 是否连接到正确的 IBAction?
【发布时间】:2016-03-16 06:45:19
【问题描述】:

我在普通的 UIButton 上看到了这个:

NSArray *actions = [viewController.addButton actionsForTarget:viewController forControlEvent:UIControlEventTouchUpInside];
XCTAssertTrue([actions containsObject:@”addNumbers:”], @””);

但现在我想为 rightBarButtonItem 做同样的事情!我在VC上测试过这个按钮存在但是没有actionForTargets接口!

我也试过了,但是没用:

NSArray *actions = [self.navigationItem.rightBarButtonItem actionsForTarget:self forControlEvent:UIControlEventTouchUpInside];

NSArray *actions = [[self.navigationItem.rightBarButtonItem target] actionsForTarget:self forControlEvent:UIControlEventTouchUpInside];

它们都不起作用。任何人都为 UIBarButton 编写了测试代码来检查按钮是否连接到正确的 IBAction?

【问题讨论】:

    标签: ios objective-c uibutton xctest uibuttonbaritem


    【解决方案1】:

    你可以遍历navigationBar的子视图,找到一个UIControl整个allTargets方法包含rightBarButtonItem。

    一旦你有了它,你可以在那个 UIControl 上调用 actionForTarget:forControlEvents:,其中 rightBarButtonItem 是目标,UIControl 的 allControlEvents 是 forControlEvents 参数:

    //get the underlying control
    for(UIControl * control in self.navigationController.navigationBar.subviews)
    {
        if([control isKindOfClass:UIControl.class])
        {
            //we found the right one
            if([control.allTargets containsObject:self.navigationItem.rightBarButtonItem])
            {
                NSArray <NSString*> * actions = [control actionsForTarget:self.navigationItem.rightBarButtonItem forControlEvent:[control allControlEvents]];
    
                //do something with actions.firstObject;
    
                return;
            }
        }
    } 
    

    但是,我认为 UINavigationBar 的子视图没有公开定义的布局,所以这是一个脆弱的解决方案。

    【讨论】:

      猜你喜欢
      • 2013-09-13
      • 1970-01-01
      • 2022-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-13
      • 1970-01-01
      相关资源
      最近更新 更多