2

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

为了补充细节,该应用程序目前不使用UIAlertView,或者UIAlertViewController理论上 swizzling 只会影响这个闭源 SDK 发生的任何事情。

4

1 回答 1

3

那根本不会是直截了当的。


如果 SDK 正在使用,请UIAlertView尝试调整show方法。

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

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

2)保留旧的参考,.delegate以便在需要时通知它。

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

4)我相信你可以使用它的属性如

@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)创建自己的设计并在需要时调用相应的委托方法。


其他方法是使用 Apple 的 Private API,但这可能会导致不好的结果。

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

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

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

在此处输入图像描述

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

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

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

于 2016-02-01T19:21:33.030 回答