- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在 iPad 应用程序中自定义 UIView 显示(如警告消息)的方式在 iOS 8 及更高版本中工作正常,但 iOS 7 View 仅在纵向模式下显示?
我的 iPad 应用程序部署目标是 iOS 7,设备方向仅为横向左和横向右。
iOS 7 屏幕:
iOS 8 屏幕:
我的代码在这里ViewController.m
- (IBAction)submitBtnActiion:(id)sender
{
if (self.emailField.text.length == 0 || self.phoneNoField.text.length == 0 || self.passField.text.length == 0) {
QAlertView *alert = [[QAlertView alloc]
initWithAlertTitle:@"Message"
withMessage:@"Please ensure that all required fields are completed"
withContent:nil
withCancelButton:@"OK"
withOtherButton:nil];
alert.delegate = self;
[alert showInWindow];
return;
}
}
QAlertView.h
#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>
@protocol QAlertDelegate <NSObject>
- (void)QAlertView:(QAlertView *)alertView
clickedAtButtonIndex:(NSInteger)index;
@end
@protocol QAlertDelegate;
@interface QAlertView : UIView
@property(nonatomic) BOOL isAdjustKeyboardOnResign;
@property(nonatomic) CGFloat adjustedValue;
@property(nonatomic) NSString *message;
@property(nonatomic, assign) id<QAlertDelegate> delegate;
- (id)initWithAlertTitle:(NSString *)title
withMessage:(NSString *)message
withContent:(UIView *)contentView
withCancelButton:(NSString *)button
withOtherButton:(NSString *)otherButton;
- (void)showInWindow;
@end
QAlertView.m
#import "QHeaders.h"
@implementation QAlertView
{
UIView *messageView;
}
@synthesize isAdjustKeyboardOnResign;
@synthesize adjustedValue;
- (CGRect)getBounds {
[[[UIApplication sharedApplication] keyWindow] endEditing:YES];
CGRect screenBounds = [UIScreen mainScreen].bounds;
NSString *ver = [[UIDevice currentDevice] systemVersion];
float ver_float = [ver floatValue];
if (ver_float >= 8.0) {
return screenBounds;
}
CGFloat width = CGRectGetWidth(screenBounds);
CGFloat height = CGRectGetHeight(screenBounds);
UIInterfaceOrientation interfaceOrientation =
[UIApplication sharedApplication].statusBarOrientation;
if (UIInterfaceOrientationIsPortrait(interfaceOrientation)) {
screenBounds.size = CGSizeMake(width, height);
} else if (UIInterfaceOrientationIsLandscape(interfaceOrientation)) {
screenBounds.size = CGSizeMake(height, width);
}
return screenBounds;
}
- (id)initWithAlertTitle:(NSString *)title
withMessage:(NSString *)message
withContent:(UIView *)contentView
withCancelButton:(NSString *)button
withOtherButton:(NSString *)otherButton {
_message = message;
bool temp = NO;
bool temp1 = NO;
if (self = [super initWithFrame:[self getBounds]]) {
self.backgroundColor = [UIColor blueColor];
}
UIView *alerView =
[[UIView alloc] initWithFrame:CGRectMake(0, 0, 1024, 1024)];
[alerView setBackgroundColor:[UIColor colorWithRed:(23 / 255.0)
green:(26 / 255.0)
blue:(31 / 255.0)
alpha:0.6]];
[self addSubview:alerView];
CGFloat adjustedHeight = ALERT_HEIGHT;
if (contentView) {
CGFloat actualHeight = contentView.frame.size.height;
adjustedHeight = actualHeight + (2 * BUTTON_HEIGHT);
}
if ([message isEqualToString:@"DisplayTableMapPopup"]) {
messageView = [[UIView alloc]
initWithFrame:CGRectMake(120,155,ALERT_WIDTH, adjustedHeight)];
_message = @"";
message = @"";
temp = YES;
}else if ([message isEqualToString:@"TableSettingPopup"]){
messageView = [[UIView alloc]
initWithFrame:CGRectMake(
((self.frame.size.width - 453) / 2)+30,
((self.frame.size.height - adjustedHeight) / 2)+24,
453, 315)];
_message = @"";
message = @"";
temp1 = YES;
}else{
messageView = [[UIView alloc]
initWithFrame:CGRectMake(
((self.frame.size.width - ALERT_WIDTH) / 2),
([QNotifier sharedInstance].qAlertKeyboardDisplay ==
YES)
? ((self.frame.size.height - adjustedHeight) / 2) -
115
: ((self.frame.size.height - adjustedHeight) / 2),
ALERT_WIDTH, adjustedHeight)];
}
[QNotifier sharedInstance].qAlertKeyboardDisplay = NO;
messageView.backgroundColor = [UIColor colorWithRed:235.0f / 255.0f
green:235.0f / 255.0f
blue:236.0f / 255.0f
alpha:1.0f];
messageView.layer.cornerRadius = 10.0f;
[messageView.layer setMasksToBounds:YES];
[messageView setUserInteractionEnabled:YES];
// INITIATE THE TITLE FOR THE ALERT VIEW
UILabel *titleLabel = [[UILabel alloc]
initWithFrame:CGRectMake(0, 5, ALERT_WIDTH, BUTTON_HEIGHT)];
titleLabel.backgroundColor = [UIColor clearColor];
titleLabel.textAlignment = NSTextAlignmentCenter;
titleLabel.text = title;
titleLabel.font = [UIFont fontWithName:ROBOTO_MEDIUM size:15.0f];
[messageView addSubview:titleLabel];
if (contentView) {
// NEED TO INCUDE THE CONTENT VIEW MIDDLE OF TITLE AND BUTTON.
[messageView addSubview:contentView];
} else {
// NEED TO INCLUDE THE MESSAGE IN THE MIDDLE OF TITLE AND BUTTON
UILabel *contentLabel = [[UILabel alloc]
initWithFrame:CGRectMake(10, BUTTON_HEIGHT - 5, ALERT_WIDTH - 20,
DEFAULT_CONTENT_HEIGHT + 5)];
contentLabel.backgroundColor = [UIColor clearColor];
contentLabel.textAlignment = NSTextAlignmentCenter;
contentLabel.textColor = ALERT_TEXTCOLOR;
contentLabel.numberOfLines = 4;
contentLabel.adjustsFontSizeToFitWidth = YES;
contentLabel.text = message;
contentLabel.font = [UIFont fontWithName:ROBOTO_LIGHT size:14.0f];
[messageView addSubview:contentLabel];
}
// TWO BUTTONS HAS VALUES.
UILabel *dividerLabel = [[UILabel alloc]init];
if (temp) {
dividerLabel.frame=CGRectMake(0,(messageView.frame.size.height - BUTTON_HEIGHT)-3,
ALERT_WIDTH, 1);
}else if(temp1){
dividerLabel.frame=CGRectMake(0,(messageView.frame.size.height - BUTTON_HEIGHT),
453, 1);
}else{
dividerLabel.frame=CGRectMake(0,(messageView.frame.size.height - BUTTON_HEIGHT),
ALERT_WIDTH, 1);
}
dividerLabel.backgroundColor = [UIColor colorWithRed:(212 / 255.0)
green:(216 / 255.0)
blue:(217 / 255.0)
alpha:1];
[messageView addSubview:dividerLabel];
NSInteger limit = (otherButton == nil || button == nil) ? 1 : 2;
for (NSInteger i = 0; i < limit; i++) {
if (i) {
UILabel *buttonDividerLabel = [[UILabel alloc]
initWithFrame:CGRectMake(
(i * (ALERT_WIDTH / limit)),
(messageView.frame.size.height - BUTTON_HEIGHT), 1,
BUTTON_HEIGHT)];
buttonDividerLabel.backgroundColor = [UIColor colorWithRed:(212 / 255.0)
green:(216 / 255.0)
blue:(217 / 255.0)
alpha:1];
[messageView addSubview:buttonDividerLabel];
}
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
[btn setFrame:CGRectMake((i * (ALERT_WIDTH / limit)),
(messageView.frame.size.height - BUTTON_HEIGHT),
ALERT_WIDTH / limit, BUTTON_HEIGHT)];
if (temp1) {
[btn setFrame:CGRectMake((i * (453 / limit)),
(messageView.frame.size.height - BUTTON_HEIGHT),
453 / limit, BUTTON_HEIGHT)];
}
btn.tag = i;
NSString *btnString;
UIColor *textColor;
if (limit > 1) {
btnString = (i) ? otherButton : button;
textColor = (i) ? BUTTON_TEXTCOLOR : [UIColor lightGrayColor];
} else {
if (otherButton) {
btnString = otherButton;
} else {
btnString = button;
}
textColor = BUTTON_TEXTCOLOR;
}
[btn setTitle:btnString forState:UIControlStateNormal];
[btn setExclusiveTouch:YES];
[btn addTarget:self
action:@selector(buttonClicked:)
forControlEvents:UIControlEventTouchUpInside];
[btn.titleLabel setFont:[UIFont fontWithName:ROBOTO_MEDIUM size:(temp1)?16:15.0f]];
[btn setTitleColor:textColor forState:UIControlStateNormal];
[messageView addSubview:btn];
}
[self addSubview:messageView];
return self;
}
- (void)showInWindow {
[[[[UIApplication sharedApplication] windows] firstObject] addSubview:self];
[[[[UIApplication sharedApplication] windows] firstObject]
bringSubviewToFront:self];
messageView.transform = CGAffineTransformMakeScale(0.9, 0.9);
[UIView animateWithDuration:0.2
delay:0
options:UIViewAnimationOptionCurveEaseOut
animations:^{
messageView.transform = CGAffineTransformIdentity;
}
completion:^(BOOL finished) {
indicatorView.alpha = 1.0;
}];
[self layoutIfNeeded];
}
- (void)dismiss {
if ([indicatorView superview]) {
[indicatorView removeFromSuperview];
indicatorView = nil;
}
[UIView animateWithDuration:0.2
animations:^{
// parentView.alpha = 0.0;
messageView.alpha = 0.0;
indicatorView.alpha = 0.0;
}
completion:^(BOOL finished) {
[messageView removeFromSuperview];
messageView = nil;
[self removeFromSuperview];
}];
}
- (void)buttonClicked:(UIButton *)btn {
if ([self.delegate
respondsToSelector:@selector(QAlertView:clickedAtButtonIndex:)]) {
[self.delegate QAlertView:self clickedAtButtonIndex:btn.tag];
}
[self dismiss];
}
提前致谢。
最佳答案
在你的方法中 - (CGRect)getBounds
UIInterfaceOrientationIsPortrait
和 UIInterfaceOrientationIsLandscape
方法仅适用于 ios8 及更高版本
Availability
Available in iOS 8.3 and later.
手动检查这些情况
enum UIInterfaceOrientation : Int {
case Unknown
case Portrait
case PortraitUpsideDown
case LandscapeLeft
case LandscapeRight
}
关于ios - iOS 7 中的自定义 UIView 方向问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37208546/
我想做的是让 JTextPane 在 JPanel 中占用尽可能多的空间。对于我使用的 UpdateInfoPanel: public class UpdateInfoPanel extends JP
我在 JPanel 中有一个 JTextArea,我想将其与 JScrollPane 一起使用。我正在使用 GridBagLayout。当我运行它时,框架似乎为 JScrollPane 腾出了空间,但
我想在 xcode 中实现以下功能。 我有一个 View Controller 。在这个 UIViewController 中,我有一个 UITabBar。它们下面是一个 UIView。将 UITab
有谁知道Firebird 2.5有没有类似于SQL中“STUFF”函数的功能? 我有一个包含父用户记录的表,另一个表包含与父相关的子用户记录。我希望能够提取用户拥有的“ROLES”的逗号分隔字符串,而
我想使用 JSON 作为 mirth channel 的输入和输出,例如详细信息保存在数据库中或创建 HL7 消息。 简而言之,输入为 JSON 解析它并输出为任何格式。 最佳答案 var objec
通常我会使用 R 并执行 merge.by,但这个文件似乎太大了,部门中的任何一台计算机都无法处理它! (任何从事遗传学工作的人的附加信息)本质上,插补似乎删除了 snp ID 的 rs 数字,我只剩
我有一个以前可能被问过的问题,但我很难找到正确的描述。我希望有人能帮助我。 在下面的代码中,我设置了varprice,我想添加javascript变量accu_id以通过rails在我的数据库中查找记
我有一个简单的 SVG 文件,在 Firefox 中可以正常查看 - 它的一些包装文本使用 foreignObject 包含一些 HTML - 文本包装在 div 中:
所以我正在为学校编写一个 Ruby 程序,如果某个值是 1 或 3,则将 bool 值更改为 true,如果是 0 或 2,则更改为 false。由于我有 Java 背景,所以我认为这段代码应该有效:
我做了什么: 我在这些账户之间创建了 VPC 对等连接 互联网网关也连接到每个 VPC 还配置了路由表(以允许来自双方的流量) 情况1: 当这两个 VPC 在同一个账户中时,我成功测试了从另一个 La
我有一个名为 contacts 的表: user_id contact_id 10294 10295 10294 10293 10293 10294 102
我正在使用 Magento 中的新模板。为避免重复代码,我想为每个产品预览使用相同的子模板。 特别是我做了这样一个展示: $products = Mage::getModel('catalog/pro
“for”是否总是检查协议(protocol)中定义的每个函数中第一个参数的类型? 编辑(改写): 当协议(protocol)方法只有一个参数时,根据该单个参数的类型(直接或任意)找到实现。当协议(p
我想从我的 PHP 代码中调用 JavaScript 函数。我通过使用以下方法实现了这一点: echo ' drawChart($id); '; 这工作正常,但我想从我的 PHP 代码中获取数据,我使
这个问题已经有答案了: Event binding on dynamically created elements? (23 个回答) 已关闭 5 年前。 我有一个动态表单,我想在其中附加一些其他 h
我正在尝试找到一种解决方案,以在 componentDidMount 中的映射项上使用 setState。 我正在使用 GraphQL连同 Gatsby返回许多 data 项目,但要求在特定的 pat
我在 ScrollView 中有一个 View 。只要用户按住该 View ,我想每 80 毫秒调用一次方法。这是我已经实现的: final Runnable vibrate = new Runnab
我用 jni 开发了一个 android 应用程序。我在 GetStringUTFChars 的 dvmDecodeIndirectRef 中得到了一个 dvmabort。我只中止了一次。 为什么会这
当我到达我的 Activity 时,我调用 FragmentPagerAdapter 来处理我的不同选项卡。在我的一个选项卡中,我想显示一个 RecyclerView,但他从未出现过,有了断点,我看到
当我按下 Activity 中的按钮时,会弹出一个 DialogFragment。在对话框 fragment 中,有一个看起来像普通 ListView 的 RecyclerView。 我想要的行为是当
我是一名优秀的程序员,十分优秀!