看起来像 UIAlertView 的自定义视图
Posted
技术标签:
【中文标题】看起来像 UIAlertView 的自定义视图【英文标题】:Custom view which looks like UIAlertView 【发布时间】:2013-10-01 14:31:27 【问题描述】:我需要看起来像 UIAlertView
的东西(相同的背景透明而不是全屏),阻止其他 UI 部分并具有一些自定义内容。
此自定义内容是:两个带有标签的复选框和底部的两个按钮 YES/NO。
子类化或自定义UIAlertView
看起来没有用(参见this answer)而且很危险(代码可能会被Apple 拒绝)。我正在考虑创建自己的自定义UIView
(可以使用UIViewController
),但我不知道如何让它看起来和感觉像 UIAlertView。我的意思是我想让它根据 ios 版本 (iOS7) 改变其外观。
更新:
我可以放弃 os 版本依赖,拥有它会很好,但这是附加功能。
主要问题是:有没有一种好方法可以让这种视图看起来和感觉像 UIAlertView 而无需大量工作?直接自定义UIAlertView
看起来既复杂又危险。
【问题讨论】:
虽然这是完全可能的,但我建议找到一种侵入性较小且不太复杂的方法来执行此操作。这样的工作量是合理的。 【参考方案1】:我创建了自己的自定义视图,看起来像 iOS UIAlertView 7。使用该技术,您可以为 iOS 6 和 iOS 7 创建自定义警报。 为此,我在 UIViewController 的 xib 文件中创建了一个 UIView :
我为此视图添加了一些@property:
// Custom iOS 7 Alert View
@property (nonatomic, weak) IBOutlet UIView *supportViewPopup; // My UIView
@property (nonatomic, weak) IBOutlet UIView *supportViewPopupBackground; // The grey view
@property (nonatomic, weak) IBOutlet UIView *supportViewPopupAction; // The white view with outlets
// Property for customize the UI of this alert (you can add other labels, buttons, tableview, etc.
@property (nonatomic, weak) IBOutlet UIButton *buttonOK;
@property (nonatomic, weak) IBOutlet UIButton *buttonCancel;
@property (nonatomic, weak) IBOutlet UILabel *labelDescription;
在我的 viewDidLoad 上:
- (void)viewDidLoad
[super viewDidLoad];
// Support View
self.supportViewPopupAction.layer.cornerRadius = 5.0f;
self.supportViewPopupAction.layer.masksToBounds = YES;
// Add Support View
[self.view addSubview:self.supportViewPopup];
// Center Support view
self.supportViewPopup.center = self.view.center;
// Alpha
self.supportViewPopup.alpha = 0.0f;
self.supportViewPopupBackground.alpha = 0.0f;
self.supportViewPopupAction.alpha = 0.0f;
显示弹出窗口的操作:
- (IBAction)displayPopup
// Support View
self.supportViewPopup.alpha = 1.0f;
self.supportViewPopupBackground.alpha = 0.5f;
// Animation
[UIView animateWithDuration:0.5f
animations:^
self.supportViewPopupAction.alpha = 1.0f;
];
关闭弹出窗口的操作:
- (IBAction)dismissModal
// Animation
[UIView animateWithDuration:0.5f
animations:^
self.supportViewPopup.alpha = 0.0f;
self.supportViewPopupBackground.alpha = 0.0f;
self.supportViewPopupAction.alpha = 0.0f;
];
因此,您可以使用按钮、表格视图、标签、集合视图等来配置您的supportViewPopupAction
...
我花时间写了这个警报视图的例子。希望对您有所帮助!
【讨论】:
但是UILabel
不会像UIAlertView
那样调整自身大小
要做到这一点,您需要使用自动布局和自动调整大小:)
按钮线是怎么做的?
没关系...知道了...额外的视图是...1px宽...聪明...非常聪明...
我一直在寻找更好的解决方案,但看起来每个外观的多个 xib 文件只是好的解决方案。谢谢。【参考方案2】:
自定义视图可以传递给 PXAlertView:https://github.com/alexanderjarvis/PXAlertView
【讨论】:
【参考方案3】:UIButtons 和 UITextFields 等一些组件的外观会因版本而异,所以没关系,我看到的问题将出现在包含 then 的视图中。
我的建议是检测应用程序正在运行的版本,然后根据该版本绘制警报视图,或者只是创建一个适合两者的自定义设计。
【讨论】:
【参考方案4】:根据 iOS 版本创建视图!
NSString *version = [[UIDevice currentDevice] systemVersion];
int major = [version intValue];
if (major < 7)
//alert for the iOS 6
else
//alert for the iOS 7
【讨论】:
这是检查 iOS 版本的糟糕方式。有更好的方法:NSFoundationVersionNumber
见documentation。无论如何,这种方法需要大量的手动编码。以上是关于看起来像 UIAlertView 的自定义视图的主要内容,如果未能解决你的问题,请参考以下文章