Ios6 如何使用自定义视图模拟UIAlertView模态行为?
我有一个视图,当您尝试保存时,如果项目条目的名称字段未填充,则会弹出一个UIAlertView。我想显示自己的自定义警报视图。我用xib加载它: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
- (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,这仍然会传递到主视图。