2013-10-11 43 views
4

当我在UIAlertView中输入文本框时,后台的ImageButton开始剪切。只有当文字靠近图像时才会发生。背景中的iPhone/iPod按钮剪切到UIAlertView文本框

The problem

的alertview的代码如下:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"... number" 
               message:nil 
               delegate:self 
             cancelButtonTitle:@"Cancel" 
             otherButtonTitles:@"Ok", nil]; 

[alert setAlertViewStyle:UIAlertViewStylePlainTextInput]; 
[[alert textFieldAtIndex:0] setKeyboardType:UIKeyboardTypeNumberPad]; 
[[alert textFieldAtIndex:0] becomeFirstResponder]; 
[alert setTag:1]; 
[alert setOpaque:true]; 
[alert show]; 

//EDIT 
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    if (alertView.tag == 2) 
    { 
     NSString* title = [alertView buttonTitleAtIndex:buttonIndex]; 
     if ([title isEqualToString:@"Cancel"]) 
     { 
      [self doSomething1]; 
     } 

     if([alertView.title isEqualToString:@"Are you sure?"] && [title isEqualToString:@"YES"]) 
     { 
      [self doSomething2]; 
     } 
    } 
} 

- (BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView 
{ 
    if (alertView.tag == 1){ 
     NSString *inputText = [[alertView textFieldAtIndex:0] text]; 
     if([inputText length] == 10) 
     { 
      NSUserDefaults* def = [NSUserDefaults standardUserDefaults]; 

      [def setObject:inputText 
        forKey:@"FIELD"]; 
      [def synchronize]; 
      return YES; 
     } 
     else 
     { 
      return NO; 
     } 
    } 
    return YES; 
} 

我试图将其设置为不透明,我试图寻找的z索引值,我也试着缩放将图像缩小到所需的最小尺寸。以屏幕截图没有帮助。这只发生在iOS 7中。

+0

我在我的应用程序中使用这种类型的警报视图,并且在我的最后没有问题,您是否正在使用图像视图或其他任何其他进程进行其他任何过程? – Yuvrajsinh

+0

你好。不我不是。该图像已经通过Storyboard设计器加载。 –

+0

用户正在输入时图像未被访问。 –

回答

1

UIAlertView不会显示在与其他视图控制器相同的UIWindow中。它们显示在它们自己的UIWindow中,窗口级别为UIWindowLevelAlert。这个其他窗口是透明的(大部分),并在主窗口之上呈现。这使得UIAlertView对象不能与其他屏幕上的视图交互。不要修改底层UIView类的任何属性。

上面显示的代码有if (alertView.tag == 1)以及if (alertView.tag == 2),但它只创建一个标签值为1的UIAlertView。是否还有其他地方正在创建第二个提醒?你是否可能在第一个完成其失踪动画之前显示第二个警报?这已知会导致图形撕裂。

可以从UIAlertView的-drawRect:方法中调用委托方法-alertViewShouldEnableFirstOtherButton:。绘制方法必须非常快以避免造成图形撕裂。您的电话号码为NSUserDefaults -synchronize,它执行磁盘写入操作。除了确定响应值之外,您不应该在您的-alertViewShouldEnableFirstOtherButton:方法中执行任何操作。如果您希望收到有关文本字段更改的通知,请将您自己指定为UITextFieldDelegate并执行-textField:shouldChangeCharactersInRange:replacementString:。该方法应该可以安全地从NSUserDefaults -synchronize中调用。

作为附加提示,您可以使用PSPDFAlertView更容易管理您的代码。