ios - 如何在 navigationItems(rightBarButtonItems 和 leftBarButtonItems)中有效地搜索 viewWithTag

标签 ios objective-c

有没有办法在navigationItems(rightBarButtonItems & leftBarButtonItems)中高效搜索UIView viewWithTag。

我希望能够以常规方式找到该 View :

UIView* myView = [screen.view viewWithTag:tag];

但这没有用。有效的是:

        UIView* myView = [screen.view viewWithTag:tag];

        if (!myView) {
            for (UIView* barButtonItem in screen.navigationItem.rightBarButtonItems) {
                if (barButtonItem.tag == tag)
                {
                    myView = [barButtonItem valueForKey:@"view"];
                    myView.tag = barButtonItem.tag;
                }
            }
        }

        if (!myView) {
            for (UIView* barButtonItem in screen.navigationItem.leftBarButtonItems) {
                if (barButtonItem.tag == tag)
                {
                    myView = [barButtonItem valueForKey:@"view"];
                    myView.tag = barButtonItem.tag;
                }
            }
        }

但这是非常丑陋的代码。还有什么更好的事情可以做吗?

最佳答案

您实际上可以通过它获得 View 。

UIView *view = [self.navigationController.navigationBar viewWithTag:4];

从自定义 View 创建的 UIBarButtonItem,将自定义 View 的标签设置为 4。

UIBarButtonItem是从系统Item中创建出来的,将其设置后的标签设置为rightBarButtonItems。

UIBarButtonItem *editButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit
                                            target:self action:@selector(viewWithTag:)];
self.navigationItem.rightBarButtonItems =
    [NSArray arrayWithObjects:editButton, nil];
UIView *view = [editButton valueForKey:@"view"];
view.tag = 4;

关于ios - 如何在 navigationItems(rightBarButtonItems 和 leftBarButtonItems)中有效地搜索 viewWithTag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26699576/

相关文章:

ios - 设置后台 session 的 xpc 连接发生错误

ios - 使用外部配置文件配置 iOS 应用程序

ios - 在 Swift 中检测 CAShapeLayer 上的点击?

iOS Photokit - PHAsset pixelWidth 和 pixelHeight 与高分辨率图像不匹配

objective-c - 什么是 NSHeartBeatThread?

objective-c - cocoa 应用程序中的 objc_msgSend() 和 EXC_BAD_ACCESS

ios - 基础核心动画——运动图像

ios - 如何过滤检测到的人脸位置和大小?

iphone - 如何控制 UINavigationBar 标题中的标题字体

ios - 从 UIUserNotificationTypeNone 传递到 UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeBadge | UI用户通知类型声音