如何访问当前固定格式页面的所有控件并进行修改

简介: 如何访问当前固定格式页面的所有控件并进行修改

如何访问当前固定格式页面的所有控件并进行修改。当然若是随着内容不断变化的页面,你可能找不到对应的控件,所以无法修改。另外有的第三方库会来回改控件的属性,你就是把它的属性修改了,第三方库也可能重新修改回去。

我们经常用到第三方的SDK,只有头文件,拿不到源代码,那么就可以采用启动一个定时器扫描几次修改它的属性了(如控件的显示和隐藏,文本颜色)。

下面给出了打印当前页面的所有控件及编号。首先可以通过基本类型和位置来确定你修改的控件,若实在找不到通过编号也能找到。只要找到控件和编号你想怎么修改还不是轻而易举的事情。具体的修改控件的我就不再本文累述了。至于单窗口我也不写了,只写多窗口的情况

- (void)dumpView:(UIView *)aView atIndent:(int)indent into:(NSMutableString *)outstring
{
    for (int i = 0; i < indent; i++) [outstring appendString:@"--"];
    [outstring appendFormat:@"[%2d] %@, height:%f, origin.y:%f\n", indent, [[aView class] description], aView.frame.size.height, aView.frame.origin.y];
    
    for (UIView *view in [aView subviews])
        [self dumpView:view atIndent:indent + 1 into:outstring];
}

// Start the tree recursion at level 0 with the root view
- (NSString *) displayViews: (UIView *) aView
{
    NSMutableString *outstring = [[NSMutableString alloc] init];
    [self dumpView: aView atIndent:0 into:outstring];
    return outstring;
}
// Show the tree
- (void)logViewTreeForMainWindow
{
    NSLog(@"The view tree:\n%@", [self displayViews:BRGetKeyWindow()]);
    
}

/** 获取 keyWindow */
static inline UIWindow *BRGetKeyWindow(void) {
    UIWindow *keyWindow = nil;
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000 // 编译时检查SDK版本:Xcode11+编译会调用(iOS SDK 13.0 以后版本的处理)
    if (@available(iOS 13.0, *)) {
        NSSet<UIScene *> *connectedScenes = [UIApplication sharedApplication].connectedScenes;
        for (UIScene *scene in connectedScenes) {
            if (scene.activationState == UISceneActivationStateForegroundActive && [scene isKindOfClass:[UIWindowScene class]]) {
                UIWindowScene *windowScene = (UIWindowScene *)scene;
                for (UIWindow *window in windowScene.windows) {
                    if (window.isKeyWindow) {
                        keyWindow = window;
                        break;
                    }
                }
            }
        }
    } else
#endif
    {
#if __IPHONE_OS_VERSION_MIN_REQUIRED < 130000
        return [UIApplication sharedApplication].keyWindow;
#endif
    }

    return keyWindow;
}

使用的代码:

-(void)loginAction:(UIButton *)button{
    [self logViewTreeForMainWindow];
    return;
}

打印的日志:

The view tree:
[ 0] UIWindow, height:896.000000, origin.y:0.000000
--[ 1] UITransitionView, height:896.000000, origin.y:0.000000
----[ 2] UIDropShadowView, height:896.000000, origin.y:0.000000
------[ 3] UILayoutContainerView, height:896.000000, origin.y:0.000000
--------[ 4] UINavigationTransitionView, height:896.000000, origin.y:0.000000
----------[ 5] UIViewControllerWrapperView, height:896.000000, origin.y:0.000000
------------[ 6] UIView, height:896.000000, origin.y:0.000000
--------------[ 7] PPPasswordLoginView, height:896.000000, origin.y:0.000000
----------------[ 8] UIView, height:862.000000, origin.y:0.000000
------------------[ 9] UIButton, height:20.000000, origin.y:60.000000
--------------------[10] UIImageView, height:16.000000, origin.y:2.000000
--------------------[10] UIButtonLabel, height:0.000000, origin.y:0.000000
------------------[ 9] UIButton, height:20.000000, origin.y:331.000000
--------------------[10] UIButtonLabel, height:15.000000, origin.y:2.500000
------------------[ 9] UILabel, height:21.000000, origin.y:128.000000
------------------[ 9] UILabel, height:14.000000, origin.y:157.000000
------------------[ 9] UIView, height:1.000000, origin.y:257.000000
------------------[ 9] UIView, height:1.000000, origin.y:317.000000
------------------[ 9] UILabel, height:25.000000, origin.y:280.000000
------------------[ 9] UIButton, height:25.000000, origin.y:280.000000
--------------------[10] UIButtonLabel, height:0.000000, origin.y:0.000000
------------------[ 9] KeyBoardTextField, height:15.000000, origin.y:230.000000
--------------------[10] UITextFieldLabel, height:15.000000, origin.y:0.000000
--------------------[10] UIFieldEditor, height:15.000000, origin.y:0.000000
----------------------[11] _UITextLayoutCanvasView, height:15.000000, origin.y:0.000000
------------------------[12] _UITextLayoutFragmentView, height:15.000000, origin.y:-1.500000
------------------------[12] UITextSelectionView, height:0.000000, origin.y:0.000000
--------------------------[13] UIView, height:15.000000, origin.y:0.000000
------------------[ 9] KeyBoardTextField, height:15.000000, origin.y:290.000000
--------------------[10] UITextFieldLabel, height:15.000000, origin.y:0.000000
--------------------[10] _UITextLayoutCanvasView, height:15.000000, origin.y:0.000000
----------------------[11] _UITextLayoutFragmentView, height:15.000000, origin.y:-1.500000
------------------[ 9] UIButton, height:13.000000, origin.y:461.500000
--------------------[10] UIButtonLabel, height:15.000000, origin.y:-1.000000
------------------[ 9] UIButton, height:13.000000, origin.y:461.500000
--------------------[10] UIButtonLabel, height:15.000000, origin.y:-1.000000
------------------[ 9] UIButton, height:44.000000, origin.y:382.000000
--------------------[10] UIButtonLabel, height:21.000000, origin.y:11.500000
------------------[ 9] UIView, height:12.000000, origin.y:462.000000
------------------[ 9] DYSelectAgreeLoginPanel, height:13.000000, origin.y:817.000000
--------------------[10] UIButton, height:30.000000, origin.y:-9.000000
----------------------[11] UIButtonLabel, height:0.000000, origin.y:0.000000
--------------------[10] BGSwapButton, height:12.000000, origin.y:0.000000
----------------------[11] UIImageView, height:12.000000, origin.y:0.000000
--------------------[10] UILabel, height:13.000000, origin.y:0.000000
--------------------[10] UIButton, height:13.000000, origin.y:0.000000
----------------------[11] UIButtonLabel, height:15.000000, origin.y:-1.000000
--------------------[10] UILabel, height:13.000000, origin.y:0.000000
--------------------[10] UIButton, height:13.000000, origin.y:0.000000
----------------------[11] UIButtonLabel, height:15.000000, origin.y:-1.000000
--------------[ 7] DYLoginPanel, height:61.000000, origin.y:738.000000
----------------[ 8] UIView, height:0.500000, origin.y:6.250000
----------------[ 8] UILabel, height:13.000000, origin.y:0.000000
----------------[ 8] UIView, height:0.500000, origin.y:6.250000
----------------[ 8] UIButton, height:40.000000, origin.y:0.000000
------------------[ 9] UIImageView, height:40.000000, origin.y:0.000000
------------------[ 9] UIButtonLabel, height:0.000000, origin.y:0.000000
----------------[ 8] UIButton, height:40.000000, origin.y:0.000000
------------------[ 9] UIImageView, height:40.000000, origin.y:0.000000
------------------[ 9] UIButtonLabel, height:0.000000, origin.y:0.000000
----------------[ 8] UILabel, height:12.000000, origin.y:48.000000
----------------[ 8] UILabel, height:12.000000, origin.y:48.000000

注意:若你放在首页的viewWillAppear中打印可能打印出来的是The view tree: [ 0] (null), height:0.000000, origin.y:0.000000。因为该方法访问的是已经显示出来的控件(包括隐藏的控件),必定从你加载控件到实际显示出来之间需要时间,所以要用定时器扫描几次才能保证修改成功。


目录
相关文章
|
安全
三维基因组|基因组结构 (2)
三维基因组|基因组结构 (2)
|
存储 缓存 算法
【数据结构与算法】【小白也能学的数据结构与算法】递归 分治 迭代 动态规划 无从下手?一文通!!!
【数据结构与算法】【小白也能学的数据结构与算法】递归 分治 迭代 动态规划 无从下手?一文通!!!
|
11月前
|
自然语言处理 Python Windows
python知识点100篇系列(23)- 使用stylecloud生成词云
【10月更文挑战第10天】`stylecloud` 是 `wordcloud` 的优化版,支持使用 Font Awesome 图标自定义词云形状,操作更简便。本文介绍如何安装 `jieba` 和 `stylecloud` 库,并使用它们生成中文词云。通过 `jieba` 进行分词,再利用 `stylecloud` 的 `gen_stylecloud` 方法生成具有特定形状和颜色的词云图像。
215 0
python知识点100篇系列(23)- 使用stylecloud生成词云
|
11月前
|
Ubuntu 网络安全 数据库
使用官方开源项目搭建自有Overleaf服务
【10月更文挑战第6天】本文详细介绍了在服务器上部署 Overleaf 服务的步骤,包括服务器环境准备、域名与 SSL 证书配置、获取官方项目代码、配置与构建服务,以及测试和使用服务等内容。适用于希望自建 Overleaf 服务的用户。建议服务器配置为 Ubuntu 系统,具备至少 10GB 磁盘和 2GB 内存。
767 0
|
前端开发 JavaScript
回调地狱(Callback Hell)
回调地狱(Callback Hell),也称为回调金字塔或异步嵌套噩梦,是JavaScript以及其它支持回调编程范式的语言中常见的一种现象。**`在处理多个连续的异步操作时`**,如果每个操作都依赖于前一个操作的结果并使用嵌套回调函数来实现,那么随着异步层级的增长,代码会变得极其深陷且难以理解和维护。
|
SQL Oracle 关系型数据库
SQL 教程
SQL 教程
89 1
|
安全 测试技术 数据库
常见测试技术都有哪些?
常见测试技术都有哪些?
271 0
|
Python
Python字典推导式
Python字典推导式
178 0
|
存储
410计算机组成原理学习笔记——运算方法和运算电路(三)
410计算机组成原理学习笔记——运算方法和运算电路(三)
715 1
410计算机组成原理学习笔记——运算方法和运算电路(三)