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

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

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

我们经常用到第三方的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。因为该方法访问的是已经显示出来的控件(包括隐藏的控件),必定从你加载控件到实际显示出来之间需要时间,所以要用定时器扫描几次才能保证修改成功。


目录
相关文章
|
6月前
|
存储 开发框架 前端开发
在Winform分页控件中集成保存用户列表显示字段及宽度调整设置
在Winform分页控件中集成保存用户列表显示字段及宽度调整设置
|
小程序 开发者
小程序__02--navigationBarTitleText配置子页面标题,依旧显示默认标题,子页面配置不显示
navigationBarTitleText配置子页面标题,依旧显示默认标题,子页面配置不显示
|
JavaScript
携带固定参数,进行页面的多次跳转
(巨好使,详细,解析URl,URl自定义传参)js URl中快速自定义传参,并且实现参数解析 修改 和新增,替换功能
259 0
|
JavaScript
使用jQuery 中的显示与隐藏动画效果实现折叠下拉菜单的收缩和展开,在页面的列表中有若干项,列表的每项中有一个二级列表,二级列表默认为隐藏状态。点击列表的项,切换二级列表的显示或隐藏状态
使用jQuery 中的显示与隐藏动画效果实现折叠下拉菜单的收缩和展开,在页面的列表中有若干项,列表的每项中有一个二级列表,二级列表默认为隐藏状态。点击列表的项,切换二级列表的显示或隐藏状态
452 0
使用jQuery 中的显示与隐藏动画效果实现折叠下拉菜单的收缩和展开,在页面的列表中有若干项,列表的每项中有一个二级列表,二级列表默认为隐藏状态。点击列表的项,切换二级列表的显示或隐藏状态
|
缓存
详细页返回列表保留原来滚动条所在位置
最近学校要求做个项目,在新闻列表页中向下滑动后,随别打开一个新闻,进入该新闻的详情页面,当看完后,从详情页返回到新闻列表页。而且滚动条也回到了最顶上的第1个新闻了。这样影响用户的体验效果。
344 0
|
前端开发 JavaScript 搜索推荐
网页中默认图片的几种解决方式
网页中默认图片的几种解决方式
|
Web App开发 缓存 网络协议
网页页面下各种标签的含义
1、charset: 2、X-UA-Compatible: 3、canonical : 4、dns-prefetch: 5、keywords 6、viewport 7、description
179 0
Flutter页面参数的传递(获取&返回),比如修改昵称头像,并在上一级页面返回显示
Flutter页面参数的传递(获取&返回),比如修改昵称头像,并在上一级页面返回显示
407 0
|
存储 BI 数据库
玩转数据显示设置
在数据显示时,数据库中通常存储的是编号、code 这些代码值,而报表使用人员无法理解其真正含义,或者日期、金额等格式需要按照指定形式进行数据格式化,点击<a href="http://c.raqsoft.
1136 0
Confluence 6 为空白空间重置原始默认内容
希望重置为原始的默认内容: 在屏幕的右上角单击 控制台按钮 ,然后选择 General Configuration 链接。
895 0

相关实验场景

更多