gpt4 book ai didi

ios - 使用 swizzling 更改 UIAlertView

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:54:49 25 4
gpt4 key购买 nike

我最近收到了一个私有(private)硬件 SDK,可以集成到我公司的移动应用程序中。一切都很好,除了他们使用的是 UIAlertView作为一些不透明方法调用的结果,我的设计团队想要标记它。我无权访问 SDK 的源代码。有什么方法可以让我安全地混合 UIAlertView保留所有功能并简单地修改 UIAlertView 的外观所以它更具品牌/与应用程序外观一致?如果是这样,我会重载 drawRect或其他东西,我如何找出 UIAlertView 中标签的名称?以便我可以用我想要的大小、形状和颜色绘制它们?

有关更多详细信息,该应用目前不使用 UIAlertViewUIAlertViewController所以理论上调配只会影响这个闭源 SDK 发生的一切。

最佳答案

那根本不是直截了当的。


如果 SDK 使用 UIAlertView,则尝试 swizzling show 方法。

您的实现应大致执行以下操作:

1) 不要让原始的 UIAlertView 显示——很难自定义它。

2) 保留对旧.delegate 的引用以便能够在需要时通知它。

3) 创建您自己的自定义 UIView 并使用 [[UIApplication sharedApplication].keyWindow addSubview:myCustomAlertView];

4) 我相信您可以使用它的属性获取所有以前的 UIAlertView 变量(即按钮标题、textFields 等)

@property(nonatomic,copy) NSString *title;
@property(nullable,nonatomic,copy) NSString *message;
- (nullable NSString *)buttonTitleAtIndex:(NSInteger)buttonIndex;
@property(nonatomic,readonly) NSInteger numberOfButtons;
@property(nonatomic) NSInteger cancelButtonIndex;

5) 创建自己的设计并在需要时调用相应的委托(delegate)方法。


其他方法是使用 Apple 的私有(private) API,但这可能会导致不好的结果。

这是一种非常 HACKY 的方法。首先,您无法保证它会起作用。其次,您的应用程序可能会被拒绝。因此,我不会真的推荐它......

但是,如果您真的想采用这种方法,请尝试这样做:

[myAlertView show]; 延迟一段时间后(即 0.01 秒就足够了)查看其属性:

enter image description here

现在寻找可疑属性(可能是 UIView 类),其中可能包含与 UI 相关的信息。例如,__representer 看起来很有趣——它有约束,它有 labelContainerView...尝试使用这些属性。

为了获得 __representer,请使用 KVC 和 KVO(即从 id theAlertController = [myAlertView valueForKey:@"_alertController"]; 开始)。然后越潜越深。

希望您能够找到有用的属性并能够通过 KVC 更改它们的值。

关于ios - 使用 swizzling 更改 UIAlertView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35136998/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com