Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios6 如何使用自定义视图模拟UIAlertView模态行为?_Ios6_Modal Dialog_Uitouch - Fatal编程技术网

Ios6 如何使用自定义视图模拟UIAlertView模态行为?

Ios6 如何使用自定义视图模拟UIAlertView模态行为?,ios6,modal-dialog,uitouch,Ios6,Modal Dialog,Uitouch,我有一个视图,当您尝试保存时,如果项目条目的名称字段未填充,则会弹出一个UIAlertView。我想显示自己的自定义警报视图。我用xib加载它: - (void)enterNameAlert { NSArray *subviewArray = [[NSBundle mainBundle] loadNibNamed:@"AddNameAlertView" owner:self options:nil]; enterNameAlertView = [subviewArray obj

我有一个视图,当您尝试保存时,如果项目条目的名称字段未填充,则会弹出一个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模式。作为一个黑客,我只是在alertview启动时将xxxx.enabled=NO设置为所有其他元素,并在您按下警报上的OK时将它们切换回xxxx.enabled=YES

必须有更好的方法来取消对self.view(而不是self.enterNameAlertView)的所有接触

如果我执行self.view.userInteractionEnabled=NO,它将取消对self.view和self.enternameartview的所有接触


有什么想法吗?

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

明白了。我使用了启用交互的UIScrollView。这将阻止来自自定义alertview外部的接触传递到下面的主视图

- (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];

}

哇,对于这么小的任务来说,似乎有很多额外的负担。推一个全新的viewcontroller只是为了阻止用户的触摸在alertview框架之外进行交互?是否有类似“接触外部区域/边界xyz=忽略”的内容?另外,我还以为你不能推一个透明背景的新视图,然后看到它下面的视图?嘿,关于推一个视图控制器,我不是这个意思,我说的是简单的UIView。插进去没什么大不了的,我已经试过了。我在主视图和alertview之间放置了一个1024x768 uiview,我仍然可以通过它进行触摸。嗯,现在我想知道该视图是否已将userInteractionEnabled设置为NO。这会有所不同吗?会通过吗?不会。试过了。在主视图和alertview之间抛出一个UIView,并将userInteractionEnabled设置为NO,这仍然会传递到主视图。