我自定义UIAlertView
,我需要在alertView
中添加一些组件(如label,tableview)。
但我有一个问题。我需要知道alertView的宽度。
我尝试添加self.frame.size.width
,但我刚收到0.000000
。
如何获取alertView的宽度?
我将计算将子视图放在,并将UILabel
置于子视图中心。我的部分代码如下:
.h文件:
#import <UIKit/UIKit.h>
@interface CustomTableViewAlert : UIAlertView
-(instancetype)initWithTitle:(NSString *)title message:(NSString *)message delegate:(id)delegate cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSString *)otherButtonTitles, ...;
@end
.m文件:
#import "CustomTableViewAlert.h"
...
@implementation CustomTableViewAlert
-(instancetype) initWithTitle:(NSString *)title message:(NSString *)message delegate:(id)delegate cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSString *)otherButtonTitles, ...
{
self = [super initWithTitle:title message:message delegate:self cancelButtonTitle:cancelButtonTitle otherButtonTitles:otherButtonTitles, nil];
if( self )
{
NSLog(@"=====self.frame.size.width:%f",self.frame.size.width);
// ^^^^^^^^^^^^^^ I got 0.000000
CGSize screenSize = [UIScreen mainScreen].bounds.size;
float showInAlertWidth = screenSize.width - 100;
float showInAlertHeight = 150;
CGSize textSize = [[notFoundDeviceLabel text] sizeWithAttributes:@{NSFontAttributeName:[notFoundDeviceLabel font]}];
CGFloat strikeWidth = textSize.width;
CGFloat strikeHeight = textSize.height;
[notFoundDeviceLabel setFrame:CGRectMake(0, 0, screenSize.width, showInAlertHeight)];
notFoundDeviceLabel.text = @"No Device found";
notFoundDeviceLabel.textAlignment = NSTextAlignmentCenter;
// new container view
containerView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, screenSize.width, showInAlertHeight)];
containerView.backgroundColor = [UIColor yellowColor];
[containerView addSubview: notFoundDeviceLabel];
}
return self;
}
非常感谢。
答案 0 :(得分:1)
虽然继承UIAlertView可能(并且很有可能)会导致Apple拒绝您的应用,但它仍然可能。您必须覆盖layoutSubviews
和drawRect
。我找到了相当不错的教程here,它遍历了查找警报视图的活动边界和插入的过程,这将允许您找到宽度。
请记住:
答案 1 :(得分:0)
你不应该是UIAlertView的子类,APPLE从iOS 7开始严格说不。您所要做的就是创建一个自定义UIView,根据您的要求添加UITableView作为子视图等。
UIAlertController是iOS 8的新功能,因此采用它对iOS 8来说可能听起来不错,但对于iOS 7来说这可能会有问题。
最好使用UIView子类而不是UIAlertView。