0

如果在您尝试保存时未填充项目条目的名称字段,我有一个弹出 UIAlertView 的视图。我想改为显示我自己的自定义警报视图。我用 xib 加载它:

- (void)enterNameAlert {

    NSArray *subviewArray = [[NSBundle mainBundle] loadNibNamed:@"AddNameAlertView" owner:self options:nil];
    enterNameAlertView = [subviewArray objectAtIndex:0];
    enterNameAlertView.frame = CGRectMake(232, 417, 303, 171);
    enterNameAlertView.alpha = 0.0;
    [self.view addSubview:enterNameAlertView];
    [self.view bringSubviewToFront:enterNameAlertView];

    //fade view in
    [UIView animateWithDuration:.50f delay:0.0f options:UIViewAnimationOptionCurveEaseOut animations:^(void) {

        enterNameAlertView.alpha = 1.0;

    } completion:NULL];

    [UIView commitAnimations];

}

但是,在显示警报时,您仍然可以单击视图上的所有其他元素。理想情况下,我想制作 alertview 模式。作为一个黑客,我只是在警报视图启动时将 xxxx.enabled = NO 设置为所有其他元素,并在警报上按 OK 时将它们切换回 xxxx.enabled = YES。

必须有一种更好的方法来取消对 self.view 而不是对 self.enterNameAlertView 的所有触摸。

如果我执行 self.view.userInteractionEnabled = NO,它将取消对 self.view 以及 self.enterNameAlertView 的所有触摸。

有任何想法吗?

4

2 回答 2

0

我认为解决您的问题的方法是,您必须在自定义警报视图和原始视图之间再引入一个视图,一旦警报出现,您需要将该视图带到您的 self.view 并在您使用时隐藏(或删除)它警报被解雇了,我已经这样做了,它对我来说就像魅力一样。希望这对你也有帮助:)

于 2012-10-10T06:58:32.657 回答
0

知道了。我使用了启用交互的 UIScrollView。这会阻止来自自定义警报视图外部的触摸被传递到下面的主视图。

- (void)enterNameAlert {

    //pop a UIScrollView behind the alert so that the user can't touch the controls behind it
    shadowScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 768, 1024)];
    shadowScrollView.userInteractionEnabled = YES;
    shadowScrollView.backgroundColor = [UIColor blackColor];
    shadowScrollView.alpha = 0.0;
    [self.view addSubview:shadowScrollView];
    [self.view bringSubviewToFront:shadowScrollView];

    //put the alertview in front of the disabled view to make it act like a modal view
    NSArray *subviewArray = [[NSBundle mainBundle] loadNibNamed:@"AddNameAlertView" owner:self options:nil];
    enterNameAlertView = [subviewArray objectAtIndex:0];
    enterNameAlertView.frame = CGRectMake(232, 417, 303, 171);
    enterNameAlertView.alpha = 0.0;
    [self.view addSubview:enterNameAlertView];
    [self.view bringSubviewToFront:enterNameAlertView];

    //animate view in
    [UIView animateWithDuration:.50f delay:0.0f options:UIViewAnimationOptionCurveEaseOut animations:^(void) {

        shadowScrollView.alpha = .6;
        enterNameAlertView.alpha = 1.0;

    } completion:NULL];

    [UIView commitAnimations];

}
于 2012-10-11T03:06:17.607 回答