4

当我在 UIAlertView 上的文本框中键入内容时,背景中的 ImageButton 开始剪切。仅当文本靠近图像时才会发生。

问题

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 中。

4

1 回答 1

1

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

您在上面显示的代码if (alertView.tag == 1)和 一样if (alertView.tag == 2),但它只创建一个标签值为 1 的 UIAlertView。您是否在其他地方创建了第二个警报?您是否可能在第一个警报完成其消失动画之前显示第二个警报?众所周知,这会导致图形撕裂。

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

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

于 2013-10-20T04:42:54.150 回答